我是MVC的新手,我通过Codeigniter框架介绍自己。作为一个练习应用程序,我正在创建一个简单的博客应用程序,它可以创建,查看,编辑和删除帖子。
对于“编辑帖子”页面,我使用与“创建新帖子”相同的视图文件,只需在用户编辑旧帖子时使用我从模型中获取的数据填充表单字段
这似乎一切都很好,但是我对控制器与视图中存储的逻辑有点混淆。我显然需要一些逻辑来告诉表单预先填充表单字段(如果我正在编辑帖子)或者将所有内容留空(如果它是新帖子)。还有其他一些事情,例如视图页面需要知道页面顶部显示的标题:“创建新帖子”或“编辑帖子”。
这个逻辑在哪里?它会进入视图吗?或者它是否进入控制器?为什么?我开始将所有逻辑放在视图文件中,因为我已经读过我应该保持控制器代码最小化,但是我现在在我的视图文件顶部有一个很大的PHP代码块来处理变量而我不确定如果这是正确的方法。
非常感谢任何建议!
答案 0 :(得分:3)
我显然需要一些逻辑来告诉表单预先填充表单字段(如果我正在编辑帖子)或者将所有内容留空(如果它是新帖子)。
查看Form Helper中的set_value()函数。您可以在视图中执行以下操作:
<input type="text" name="subject" value="<?php echo set_value('subject', $subject); ?>" size="50" />
如果是新帖子,请在从Controller加载View时将空字符串作为$ subject传递。
如果正在编辑,请将正在编辑的帖子的主题作为$ subject传递。
此外,如果用户提交表单并且有错误并且您需要重新加载表单,set_value()将返回用户刚发布的内容(即$ _POST ['subject'])。
还有其他一些内容,例如视图页面需要知道页面顶部显示的标题:“创建新帖子”或“编辑帖子”。
只需将一个名为$ page_title的变量从Controller传递给View,然后相应地设置该值。这很常见,特别是当您开始构建可重用模板时。
这个逻辑在哪里?它会进入视图吗?或者它是否进入控制器?为什么?
视图中几乎没有逻辑。如果必须的话,可能是简单的if / else语句,并循环迭代数据数组。
即使是控制器也不应该有太多的逻辑。它主要负责模型,视图和库之间的中间人。
我读过我应该保持控制器代码最小
这与控制器与模型有关,而与视图无关。优良作法是保持控制器更小,并将尽可能多的逻辑放入模型和库中。也被称为“瘦模控制器,脂肪模型”。