この記事の例では、CodeIgniter カスタム コントローラー MY_Controller の使用方法について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
Codeigniter のすべてのコントローラーは CI_Controller クラスを継承する必要がありますが、CI_Controller クラスはシステム ディレクトリに配置されており、変更するのは簡単ではありません。いくつかの共通処理を容易にするために、通常はコアの下に MY_Controller を作成して CI_Controller を継承し、プロジェクト内のすべてのコントローラーが MY_Controller を継承するようにします。
では、MY_Controller は通常何をしているのでしょうか?
すべてのコントローラーは MY_Controller を継承します。MY_Controller は、多くの場合、いくつかのパブリック ヘルパー関数、パブリック クラス ライブラリをロードし、いくつかのパブリック メソッドを実装します。
パブリックメソッド?パブリックメソッド?
これらのメソッドを見ると、メソッドが公開されている場合、ブラウザからアクセスできるかという問題に気づきます。答えは「はい」です! このようにして、ユーザーはアクセスできないメソッドにアクセスできるようになります。次に、それを保護に設定します。 。 。
注意事項: CI_Controller で記述されたパブリック メソッドにはアクセスできません。フレームワークは、ブラウザーを介した CI_Controller のメソッドへのアクセスを制限します。
プロジェクトが進行し続けるにつれて、MY_Controller のパブリック メソッドがますます増えていきます。現時点でバックグラウンド管理機能を追加する必要があり、すべてのコントローラーがまだ MY_Controller を継承している場合、メソッドの多くは適用できない可能性があります。バックエンドに必要なパブリックメソッドもここに書いてしまうと混乱してしまいます。
モジュールごとに異なるコントローラーを区別するにはどうすればよいですか?
2 つの処理方法があります。1 つは、異なるパブリック コントローラー ファイルを区別することです。もちろん、ここではどのパブリック コントローラーを導入する必要があります。もう 1 つの方法は、オブジェクトの属性を通じてそれを維持することです。さまざまなモジュールがこの属性をさまざまなオブジェクトに割り当てます。例:
リーリーコントローラーは MY_Controller コンストラクターを呼び出し、型値を渡します。異なる型値に従って異なるクラス ライブラリがロードされ、処理を容易にするためにクラスに統一されたエイリアスが定義されます。特定のライブラリは、モジュールのパブリック メソッドを処理したり、モジュールのパブリック クラスに相当するパブリック リソースをロードしたりできます。もちろん、ルーティングなどのディレクトリ名やコントローラ名で直接処理方法を制御することも可能です。
これにより、メソッドを呼び出すときに、$this->helper オブジェクトを介して呼び出すだけで済み、さまざまなファイルをロードする必要がなくなります。よく見てみると、さまざまなモジュールのパブリック クラスがライブラリに配置されていることがわかります。 get_intance を使用してライブラリまたはヘルパー内のコントローラー オブジェクトを取得できますが、使用するたびにインスタンスを取得する必要があります。これがモデルの場合はどうなるでしょうか。気分も良くありません。公開メソッドの一部はビジネス ロジックに関連しているため、ライブラリに含めるのは不適切であると感じられます。
ビジネスロジック、コントローラーのプライベートメソッドを実装するのに適した場所がないようです?モデル?
まず上記の処理方法を要約します:
1. さまざまなモジュールをオンデマンドでロードし、カスタマイズされたパブリック メソッドを実装できます。各モジュールは相互に影響しません。モジュール間で共通のメソッドが多い場合は、共通のクラスを継承することもできます。
2. パブリックメソッドがライブラリに配置されており、CI インスタンスを呼び出すのが不便です。
3. $this->herlper の呼び出しメソッドが気に入らない場合は、コントローラーに別のパブリック コントローラーを継承させることができますが、ファイルを手動で導入する必要がある場合があります。
CodeIgniter 関連のコンテンツに興味のある読者は、このサイトの特別トピック「CodeIgniter チュートリアルの概要」および「CI (CodeIgniter) フレームワークの高度なチュートリアル」をチェックしてください
この記事が、CodeIgniter フレームワークに基づく皆様の PHP プログラム設計に役立つことを願っています。