私はMVCを理解しようとしており、CIフレームワークを学んでいます。MVCに関するいくつかの質問とCIに関するいくつかの基本的な質問があります。
1)チュートリアルから読んだように、ビューはアプリケーションの視覚的な部分です。私の質問は次のとおりです。たとえば、[ログイン]ボタンがありますが、ユーザーがすでにログインしている場合、ボタンは[ログアウト]になります。そのログインチェックはどこにありますか?コントローラー上またはビュー上?つまり
//this is view//
<?php if($_SESSION('logged') == true):?>
<a href="logout">Logout</a>
<?php else: ?>
<a href="login">login</a>
<?php endif; ?>
また
//this is controller//
if($_SESSION('logged') == true)
$buttonVal = 'logout';
else
$buttonVal = 'login';
//and we pass these value to view like
$this->view->load('header',$someData);
//this time view is like
<a href="<?=$somedata['buttonVal']?>"><?=$somedata['buttonVal']?></a>
例としてこれらのコードを書くだけで、機能しないことがわかっています。これらは架空のコードですが、私が言っていることは理解できたと思います。ログインチェックはコントローラー上またはビュー上にある必要がありますか?
2)モデルにはデータに関するコードのみを含めてコントローラーに返す必要がありますか?たとえば、数学があります。データベースから2つの値を取得し、それらを乗算して表示します。モデルは増殖しますか、それともコントローラーがそれを行いますか?
ここでは、モデルを使用してデータをロードし、コントローラーで計算を行います。// model
$db->query(....);
$vars=$db->fetchAll();
return $vars;
//controller
$multi = $vars[0] * $vars[1];
$this-load->view('bla.php',$mutli);
ここでは、モデルを使用してデータをロードし、モデルに対しても計算を行います。コントローラーは、モデルからビューにデータを渡すだけです。
//model
$db->query(....);
$vars=$db->fetchAll();
$multi = $vars[0] * $vars[1];
return $multi;
//controller
$multi = $this->model->multiply();
$this-load->view('bla.php',$mutli);
つまり、モデルはデータベース作業のみを実行してデータをコントローラーに渡し、コントローラーは残りの作業を実行してビューをレンダリングに送信する必要がありますか?または、モデルは機能しますが、コントローラーはモデルを取得して表示に送信しますか?
3)これはcodeigniterに関するものです。すべてのページにヘッダーを配置する必要がありますが、使用しているページに応じてjavascripts、cssがあります。
<?php foreach ($styles as $style): ?>
<link id="stil" href="<?= base_url() ?>/css/<?= $style ?>.css" rel="stylesheet" type="text/css" />
<?php endforeach; ?>
これはすべてのページにあるので、すべてのコントローラーで私は持っています
$data['styles'] = array('css1','css2');
$this->load->view('header', $headers);
メインコントローラーを作成してこれを書き込むことを考えています。他のすべてのコントローラーがこれを拡張します。CIwikiにMY_Controllerが表示されますが、このMY_Controllerは私が行っていることと同じですか?これを行う他の方法はありますか?
悪い英語とダミーの質問でごめんなさい。回答ありがとうございます。