最近、Codeigniter を使用して他の人が書いたプロジェクトを引き継いで改善する予定です。以前 CI を使用したことがありますが、完全に自分の希望に従って作成し、一部の CI ルーチンに従っていませんでした。一般の人が使うプロジェクトの場合は、フレームワークの仕様に従うのがベストなので、将来引き継いだときに笑われないようまとめておくと良いでしょう。
1. まずはMVCです
MVC をまだ知らない場合は、できるだけ早く学習する必要があります。モデルでデータにアクセスし、コントローラーでビジネス ロジックを実行し、ビューで HTML コードを記述することの価値がすぐにわかります。これまでこのモデルを使用してプログラミングしたことがない場合は、額にしわを寄せるかもしれませんが、試してみる機会を与えてください。
経験則としては、コントローラーに入れるものを減らし、「車輪を再発明しない」という DRY ルールを覚えておいてください。同じコードを複数の場所に記述する場合は、その種類に応じてライブラリ、ヘルパー、またはモデルを作成するようにしてください。例えば、データベース接続クラスはよく使われるのでモデル化(システム側で提供)します。
MVC の本質を理解すると、これが習慣になり、MVC の簡潔なコードから多くの恩恵を受けるでしょう。
1 つの原則は、複雑な操作をモデルに任せることです。コントローラーはむしろアーキテクトに似ています。モデルは大変なお仕事です。ビューは画家です。コントローラーはモデルに何かを投げるだけでよく、データが異常であるかどうかを気にする必要はなく、フラグと対応するデータを返します。このように、MVC アーキテクチャが反映されています。
モデルは実際には電子レンジなどの電化製品に似ています。使いやすいほど、より多くの人に好まれます (食べ物を入れてスタートを押し、ご飯が炊き上がります)。インターフェイスが少ないという利点があります。それは、モデルがアップグレードされ、コードが最適化された場合、外部世界との結合度が高くないことです。たとえ内部的にうまく書かれていないとしても、インターフェイスはきれいで使いやすいです。
2. アプリケーションとシステムのパス
システム フォルダーとアプリケーション フォルダーを Webroot の外に配置するのが最善です。index.php が FTP サーバーの /public_html/ パスの下に配置されている場合は、システムをルート ディレクトリ /system の下に配置するようにしてください。 PHP ファイルにアクセスできるのは、index.php のみです。
index.php ファイル内の $system_folder と $application_folder の値を変更することを忘れないでください。$system_folder の値は、index.php ファイルを基準にし、$application_folder の値は、システムディレクトリ。
3. エラーの報告とデバッグ
よくある間違いは、PHP エラーとデータベース エラーのレポートをオフにするのを忘れることです。これは危険です。公開サイトでは、error_reporting は 0 に設定する必要があり、データベース設定 db_debug は false に設定する必要があります。ini_set('display_errors') は、エラー情報が表示されないように設定します。 、「オフ」);
コーディングとデバッグを行うときは、アプリケーションをリリースする前に、error_reporting を E_ALL に設定し、すべてのメモと警告に対処する必要があります。
簡単な方法は、Web サイトの実行中に、application/config/database.php ファイルで db_debug の値を定数 MP_DB_DEBUG に設定することです。
4. 安全性の問題は非常に重要です
フォームによって送信された POST データ、COOKIE データ、URI データ、XML-RPC データ、または SERVER 配列内のデータのいずれであっても、プログラムにデータを受信する前に、次の 3 つの手順を実行することをお勧めします。
不良データをフィルタリングします。
データを検証して、タイプ、長さ、サイズなどが正しいことを確認します (場合によっては、このステップが最初のステップの代わりになることもあります)
データベースに送信する前にデータを変換します。
SQL インジェクション、XSS、CSRF については、それらを理解した上で、それらを防止する方法を採用するかどうかを決定する必要があります。 CI マニュアルのセキュリティ ガイドラインと入力およびセキュリティ カテゴリを参照できます。おそらく最も重要な原則は、データベースまたはファイル システムにデータを送信する前にすべてのユーザー入力をチェックすることです。
XSS (クロスサイト スクリプティング)。 $config['global_xss_filtering'] = TRUE; を設定すると、POST および COOKIE でのクロスサイト スクリプティング攻撃の自動フィルタリングが有効になり、一部のリソースが消費されます。 POST と COOKIE が処理されるたびに個別に使用することもでき、$this->input->post('some_data', TRUE); のように 2 番目のパラメーターを TRUE に設定します。フォーム検証クラスは XSS も提供します。 $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean');
などのフィルタリング オプション
CSRF (クロスサイト リクエスト フォージェリ)。 CI 2.0 には CSRF チェックが組み込まれています。フォーム送信と URL リンクの保護について詳しくは、Google で「CSRF トークン」を検索し、「double cookie submit」または「double submit cookie」を検索してください。
SPAM (スパムおよび悪意のある登録)。電子メール フォーム、コメント フォーム、その他のユーザーが送信したさまざまな無料データを保護することで、スパムを防止します。これを行うための簡単な方法は、1 分間に 1 つの IP/ユーザー クライアントのみに送信を許可することです。 CI2 には CAPTCHA 補助機能が組み込まれています。
5. データベースとORM
CodeIgniter には、SQL ステートメントを使用せずにクエリ ステートメントを作成できる組み込みライブラリ Active Record があります。これは、SQL ステートメントにあまり熟練していない場合、または SQL インジェクションを防ぐ方法がわからない場合に適した方法です。より強力なツールが必要な場合は、有名な ORM である Object Relational Mapper の使用を検討できます。残念ながら、CodeIgniter には ORM ライブラリが付属していませんが、他にいくつかの優れたオプションがあります。
おそらく最も人気のあるのは DataMapper OverZealous Edition (DMZ) です。Doctrine (ここにチュートリアルがあります) を使用することもできます。別のオプションである RapidDataMapper は作者自身の作品です。
6. コードの練習
簡潔なコードを作成して自分のコードを理解し、他の人のコードをコピーして貼り付けるだけでなく、コーディング スキルを向上させ続けてください。ハンドブックの開発ガイドラインは、より良いコードの書き方を学ぶ場所です。1.ドライ。車輪の再発明を繰り返さないでください。コントローラーではなく、ライブラリ、ヘルパー、モデルなどの再利用可能なコードを配置してください。コードをコピーするときは、すでに 2 回目のコードが配置されている可能性があります。間違った場所。
2. キャッシング。キャッシュは、特にデータベースへのアクセスを減らすことにより、パフォーマンスを向上させる優れた方法です。 Web ページのキャッシュとデータベースのキャッシュを参照したり、フォーラムで他のオプションを検索したりできます。たとえば、MP_Cache は作者自身の作品です。
3. HTTP ヘッダー。クライアント側では、別の HTTP ヘッダーをブラウザーに送信してページをキャッシュすることでパフォーマンスを向上させることができます。また、AJAX を使用する場合は、ブラウザーのキャッシュを無効にすることにも注意する必要があります。
キャッシュを無効にする例:
7. テンプレートのレンダリングでは毎回ヘッダーとフッターを呼び出す必要はありません
MY_Controller ヘッダーと __construct 関数に次の内容を追加して、application/config/constants.php でデフォルトのテンプレート情報を自分で定義する必要があります。
8. すべてのクラスが CI_Controller を継承する必要はありません
新しく追加されたコントローラーは CI_Controller を継承せず、代わりに MY_Controller を継承します。
9. CodeIgniter のファイル構造
cache は、キャッシュ ファイルを保存するために使用されます。 codeigniter フォルダーには、php4 と php5 との互換性を保つために、CI_Base の 2 つのバージョンが含まれています。ライブラリには、一般的に使用されるクラス ライブラリのほとんど (Model、View、Cotronller) が格納されます。作成する mvc は、既存の mvc クラスから継承する必要があります。これは、便利な作業を支援するために使用されます。他のモジュールの。 language は、複数の言語をサポートする言語パッケージです。
アプリケーション フォルダーは、モデル、ビュー、コントローラー、構成、エラー、フック、ライブラリなどのサブファイルを内部的に追加するために使用されます。最初の 3 つのフォルダーは、モデル、ビュー、コントローラーの作成に使用されます。作業のほとんどは独自の MVC を作成することであり、モデルとコントローラーの動作を支援するために、構成ファイルを config に追加し、一部のオブジェクトとメソッドをライブラリに追加できます。フックも CI_Hook の拡張です。詳細については、次の章を参照してください。
10. CodeIgniterの作業プロセス
http://www.google.com/blog/ などの http リクエストがある場合は、まず CI ブート ファイルindex.php を入力します。次に、index.php で何が行われているかを見てみましょう。
index は、まずアプリケーション フォルダー名を application に設定し、システム フォルダー名を system に設定します。次に、一連の厳密な判断を行って、それらを Unix スタイルのサーバー絶対ファイル パスに変換します。具体的には、2 つの重要な定数 APPPATH を定義します。分析によると、パスはシステムと同じレベルにある可能性があります: htdocs/application/ 、またはシステム フォルダにそのサブフォルダとして配置される可能性があります: htdocs/system/application/ 2 番目の方法を使用することをお勧めします。これは、Web サイト ドキュメントの基本ファイル パスである BASEPATH は、最終的には htdoc/system/ になります。最終的に、インデックス ブート ファイルは codeigniter/codeigniter.php に導入されます。次に、codeigniter で何が行われるかを見てみましょう。
codeigniter.php は、最初に Common.php、Compat.php、config/constants.php の 3 つのファイルを紹介します。 Common には、クラス ライブラリをロードするためのload_class、ログを記録するための log_message、エラー ページを紹介する show_404 などのいくつかの関数が含まれています。いくつかの重要な関数; Compat は主に php4 と php5 の関数の互換性の問題を解決し、定数はファイルの読み取りと書き込みのアクセス許可に関するいくつかの定数を定義します。
次に、codeigniter は最初のクラス ライブラリである Benchmark を読み込みます。このクラス ライブラリの最も単純なアプリケーションの 1 つは、Web ページの開始からコンパイルの終了までにかかる時間を計算することで、先頭にマークを付けます。コンパイルとレンダリングが終了すると、マークを追加して、費やした時間を計算できます。
次に、2 番目のクラス ライブラリであるフックがロードされます。このクラス ライブラリは Benchmark などのシステム ライブラリの下にあり、プログラムがコンパイルを開始する前に他のことを実行する機会を提供します。他のミッションでは約 8 つの機会が提供されます。詳細についてはユーザー ガイドを参照してください。ここでは最初のフックをインポートします。
次に、Config、URI、Router、Output、およびその他のクラス ライブラリをそれぞれロードします。次に、cache_override フックがあるかどうかを確認します。このフックを使用すると、Output クラスの _display_cache メソッドを置き換える関数をスケジュールできます。 _display_cache を直接出力し、キャッシュ コンテンツがあるかどうかを確認し、存在する場合はキャッシュを直接出力し、存在しない場合は実行を続行します。
その後、入力と言語のロードを続けます。前にロードされたクラス ライブラリはすべて参照であることに注意してください。次に、CI_Base オブジェクトのロードが最初に判断されます。 php4 バージョンでは、Loader が最初にロードされ、次に Base4 がロードされます。Base4 の CI_Base は CI_Loader を継承しますが、Base5 では、CI_Base と CI_Loader には継承関係がありません。
次のステップも非常に重要なステップです。このステップは、参照ではなくインスタンスであるコントローラー クラスをロードすることから始まり、ルーターを通じて http アドレスを解析してコントローラーとメソッドの名前を取得し、チェックします。アプリケーションコントローラが存在するかどうか、存在しない場合はエラーが報告され、存在する場合は判定が開始されます。
まとめ
まずはこれくらいまとめて、後ほど追加していきます。皆さんも気に入っていただければ幸いです。