我正在尝试了解 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 个值并将它们相乘并显示它们。模型会成倍增加还是控制器会做?
在这里,我们使用模型加载数据并在控制器上进行数学运算://模型
$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);
我正在考虑做一个主控制器,在里面写这个,我所有的其他控制器都会扩展这个,我在 CI wiki 上看到了 MY_Controller,这个 MY_Controller 和我正在做的一样吗?还有其他方法可以做到这一点吗?
很抱歉英语不好和愚蠢的问题。感谢您的回答。