spo*_*tlr 0 oop model-view-controller codeigniter user-experience
我对CodeIgniter MVC的原理提出了一个"简单"的问题.如果我查看CI(模型)中的手册,我会看到例如:
function insert_entry()
{
$this->title = $_POST['title']; // please read the below note
$this->content = $_POST['content'];
$this->date = time();
$this->db->insert('entries', $this);
}
Run Code Online (Sandbox Code Playgroud)
好吧,好吧 - 以这种方式输入数据很糟糕我知道:)但是如果我们使用"$ this-> input-> post()"...对我来说它看起来并不好.在使用模型中的函数之前处理控制器中的数据不是更好吗?也许模型部分看起来如此:
function insert_entry($data)
{
$this->db->insert('entries', $data);
}
Run Code Online (Sandbox Code Playgroud)
在像这样的控制器中:
$this->load->model('Blog');
$data = array();
$data['title'] = $this->input->post('title');
$data['content'] = $this->input->post('content');
$this->Blog->insert_entry($data);
Run Code Online (Sandbox Code Playgroud)
但我在哪里运行验证等...模型或控制器?也许有人明白我想知道什么.也许你有更多的经验,链接或其他什么.谢谢!
如果您尝试使用CodeIgniter实现适当的MVC或MVC启发的设计模式,那么您已经失败了.CodeIgniter不遵循MVC和相关模式的想法.它实际上只是克隆了Rails中使用的模式(如果你想知道原因和方法,我可以在评论部分详细说明).
那说......
$this->input->post()在控制器中使用的原因是提供一些抽象并将代码与PHP的超全局分开.你所谓的"控制器"应该从用户的请求中收集数据并将其传递给模型层的结构.模型层应该完全没有意识到前端.用于创建发票的域业务逻辑不会因为您将<input/>发票编号从"innr" 重命名为"number"而更改.
数据验证应该在模型层中进行.如果操作正确,验证代码是域对象的一部分,数据完整性检查将由存储抽象(例如,数据映射器)处理,但在CodeIgniter中,人们通常将域和存储逻辑混为一谈并调用它:"模型".当然,这违反了SRP,但CI用户并不关心,甚至没有意识到这些原则.所以基本上,在为CI编写时,验证应该在"模型"中进行.
如果您想要阅读有关整个主题的更多信息,您可能会发现此帖子相关.
| 归档时间: |
|
| 查看次数: |
1722 次 |
| 最近记录: |