定義済み/商用のフレームワークを使用せずに、MVCを少し試してみることにしました。モデルとコントローラーの作成を処理できます。私の場合、ビューは基本的なhtmlです。作成方法がわからないのは、コントローラーがビューをロードするときだけです。
たとえば、codeigniterでは次のように使用します。$this->load->view('view_name');
しかし、この機能を作成している場合、どのようになりますか?
ps説明コードをいただければ幸いです。
定義済み/商用のフレームワークを使用せずに、MVCを少し試してみることにしました。モデルとコントローラーの作成を処理できます。私の場合、ビューは基本的なhtmlです。作成方法がわからないのは、コントローラーがビューをロードするときだけです。
たとえば、codeigniterでは次のように使用します。$this->load->view('view_name');
しかし、この機能を作成している場合、どのようになりますか?
ps説明コードをいただければ幸いです。
これは、MVCの奇妙なパロディーを実装している場合、Railsのようなフレームワークの広範な使用に触発されているためです。
これはほとんどの人が理解できない部分です。ビューは、すべてのプレゼンテーションロジックを担当するインスタンスであると想定されています。モデルレイヤーから取得したデータに基づいて、複数のテンプレートを調整し、使用するテンプレートを選択します。
ビューはこれらのテンプレートのいくつかを取り、それらを組み合わせてHTML応答を作成します。または、必要に応じて、HTMLの代わりにHTTPヘッダーを送信することもできます。
コントローラは、「ビューのロード」または「ビューの作成」を行ってはなりません。完全に形成されたビューは、コントローラーに注入して、場合によってはそのビューの状態を変更できるようにする必要があります。
WebのMVCに着想を得たパターンでは、コントローラーとビューの間に1:1の関係があることは非常に一般的です。コントローラをクレートでインスタンス化するとき、ほぼ同じ段階で同じクラス名(名前空間が異なるだけ)のビューをインスタンス化できます。
クラス名がある場合は、対応するコントローラーの前にビューをインスタンス化できます。このようにして、コントローラーのコンストラクターにビューインスタンスを挿入できます。
次のようなメインコントローラーに機能を追加します
appcontroler.php
function myLoadView($viewname){
include $config['basepath'].'/views/'.$viewname.'.html';
}
このように実装できます
あなたはのように使うことができます
$this->myLoadView('index');
更新しました:-
このように関数を更新します
function myLoadView($viewname){
include $config['basepath'].'/views/header.html';
include $config['basepath'].'/views/'.$viewname.'.html';
include $config['basepath'].'/views/footer.html';
}
個人的には、コントローラーにビューを返してもらいます。多くのフレームワークがこれを行います。$ this-> view('your view class')を返すか、responseView('')などの名前を付けることができます。次に、任意の変数を配列の2番目の引数として渡して、ビューがそれにアクセスできるようにします。
例えば:
class SomeController extends Controller {
public function index() {
// do stuff
return $this->responseView('view_name', array(
'param' => 'value',
'title' => 'pages title'
));
}
}
次に、フロントコントローラーは、ビューを返したかどうか、および応答の処理を開始したかどうかをテストします。