私はCodeignitor2.xを使用しており、元々はコントローラーをモジュールとして使用していました(完全にHMVCではありません)。他の下位レベルのコントローラーを呼び出すトップレベルのコントローラーがありました。私の考えでは、これらの下位レベルのコントローラーはまだビューと対話しているため、モデルやドライバーではなくコントローラーのままにする必要があります。
ただし、私が見つけたのは、コントローラーの各インスタンスがCIの新しいインスタンスも生成することです。したがって、リクエストごとに3つまたは4つのCIインスタンスを実行します。大量のオーバーヘッドが発生し、セッションの問題も発生しました。
それ以来、これらの下位レベルのコントローラーをドライバーとしてライブラリに移動しました。これで、constructメソッドでCIインスタンスをキャプチャし、それに変更を加えます。これにより、作業が非常に便利になり、HMVC拡張機能は必要ありません。ドライバーは外部からも呼び出せないので、特定のエントリーポイントを介してすべてのリクエストを集めることができます。
私の質問は、これが構造的に正しいかどうかです。 私は常に、ドライバーはメソッド呼び出しを通じて提供されたデータのみを変更する必要があるという考えを持っていましたが、これらのドライバーの多くはGETとPOSTから直接情報を取得し、ビューに直接追加することはありませんが、頻繁にアクセスしますファイルを表示し、処理されたビューをCIインスタンスに渡して出力します。
[編集]もう少しコンテキスト: 私が作成したドライバーの1つは、基本的に「アクセス」と呼ばれるユーザーログインドライバーです。create / login/logoutメソッドの「User」モデルを呼び出します。ドライバーはPOSTデータを使用してユーザーモデルをチェックし、エラーや必要なものを含む正しいビューをロードします。このアイデアは、2行で、プロジェクト全体の任意のコントローラーにこのドライバーを含めることができるため、コードの冗長性が大幅に低下します。繰り返しになりますが、ドライバーはスコープに限定する必要があることはわかっていますが、ドライバーはスコープ外のものを変更せず、作成したビューを返すだけです。
ストレートMVCとよりインラインでこれを行うための別の方法はありますか?