CIフレームワークのソースコード読み取り:ControllerController.php
最近少し時間が迫っており、ソースコードリーディングシリーズの更新が少し遅れています。コントローラーのコードは比較的少ないため、このブログではまずこのファイルのソース コード分析を更新します。
ルーティングと配布の後、実際のアプリケーション コントローラーはユーザーからのすべてのリクエストを引き継ぎ、ユーザー データと対話する責任を負います。 CI 内のすべてのアプリケーション コントローラーは CI_Controller のサブクラスである必要があります (CI のコアを拡張しない限り、コントローラーの親クラスは MY_Controller にすることができます)。
アプリケーションコントローラーでは、次のようなコードをよく使います:
リーリー
これらはどのように実装されているのでしょうか?次に簡単に説明します。
このクラスの構造は非常に単純ですが、CI_Controller のクラス図を掲載します。
1. _construct() コンストラクター
ここで、CI はプロセスを実行し、ロードされたすべてのコンポーネントを CI_Controller に追加します (is_loaded 関数がロードされたすべてのコンポーネントを追跡することは前に説明しました):
リーリー
コントローラーがインスタンス化されるときに is_loaded によって追跡されるコンポーネントを確認します。
これは、$this->input やその他のメソッドを通じて CI コンポーネントを呼び出すことができる理由を説明しています。
これだけでは不十分です。ローダーも導入しましょう:
リーリー
これで、Loader コンポーネントを使用して、設定の読み込み ($this->load->config)、モデルの読み込み ($this->load->model)、ビューの読み込み ($this) を行うことができます- >ロード - >表示)
CI_Controller は、複数のコンポーネントを保持するスーパークラスであると言えます。このように、設計パターンにおける「エージェント パターン」によく似ています。
2.&get_instance
簡単に説明すると、CI_Controller はシングルトンモードのクラスであり、このクラスのインスタンスは get_instance() メソッドを通じて取得されます。このメソッドは、CodeIgniter.php の get_instance 関数によって呼び出されます。 リーリー
以下はコントローラーに関するヒントです:
1. CI のコントローラーでディレクトリをカスタマイズできます。たとえば、application/controller ディレクトリにディレクトリ admin を作成し、コントローラーの URL アクセス パスは次のようになります。
リーリー
2. コントローラーは過度のロジックを持たないようにして、ビジネス ロジックをモデルにカプセル化する必要があります。
3. コントローラーはビジネスに応じて区別する必要があります。たとえば、UserController はユーザー関連のリクエストを処理し、AppController はアプリケーションのリクエストを処理します。
4. コントローラーのクラス名は大文字で始まり、ファイル名はすべて小文字である必要があります。
5. コントローラー内のアンダースコアで始まるメソッドは CI によってプライベートメソッドとみなされ、外部から直接アクセスすることはできません。
上記がControllerの全内容です。
最後に、CI_Controllerのソースコードを掲載します:
リーリー
上記は、CI フレームワークのソース コード (Controller.php) を内容も含めて紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。