ビュー内のModelクラスを直接呼び出すのがベストプラクティスですか?現在、CodeIgniterを使用してアプリケーションを開発しています。アプリケーションのさまざまなビューに、データベースから取得したいメニューを含めています。そして、現在、コントローラーを介してメニューに値を渡しています。共通のモデルクラスを作成し、それをビューおよびバイパスコントローラーから呼び出す場合。モデルへの呼び出しが1回あり、データベースからメニューを一度にロードし、コントローラーをバイパスするようにします。これを行うことによって、どのような長所と短所が来るのでしょうか?
4 に答える
codeigniterを使用すると、データがどこから来たのかを気にする必要はなく、データが存在するだけです。コントローラーのみがモデルと直接接触する必要があります。
ビューにロードしたい共通のメニューがあり、そのコードをすべてのコントローラーに複製したくないようです。
この問題を解決するには、メニューをフェッチするメソッドを使用して、プライマリコントローラーが継承する共通コントローラーを作成する必要があります。
My_Controller
core
ディレクトリ内のフォルダに保存する必要がありますapplication
。
class MY_Controller extends CI_Controller
{
protected function get_menu()
{
// Load your menu here
$this->load->model('menu_model');
return $this->menu_model->get_menu();
}
}
すべてのプライマリコントローラーは継承しますMY_Controller
class Home_Controller extends MY_Controller
{
public function index()
{
$page_data = array('menu' => $this->get_menu());
$this->load->view('home/index', $page_data);
}
}
私の意見では、ベストプラクティスではありません。ビューはコントローラーに接続する必要があり、コントローラーはモデルがすべてのロジックを実行するモデルからデータを取得する必要があります。コントローラーは、ビューとモデルの接着剤または仲介者であると想定しています。
Controllerは返されたデータをViewに渡し、foreachループなどを実行して表示します。
ビューはロジックを実行してはなりません。データベースからデータを取得することは、いくぶん論理的です。
それは最悪の習慣です。それでは、なぜMVCのコントローラーコンセプトがあるのか。:)主にすべてのロジックがモデルに組み込まれるため、モデルを直接呼び出すのは適切ではありません。
共通のコントローラーを使用しているので問題ありません。
注:モデルをビューから直接呼び出さないでください。