一方面,表单验证可以被视为应用程序逻辑的一部分,因此属于模型.
另一方面,它直接处理来自视图的输入并处理显示错误等.从这个角度来看,将它放入控制器更有意义.
从MVC的角度来看哪一个是正确的方法?
PS我的表单验证实际上只包括编写字段列表,它们的规则,并将其传递给表单验证库,它返回true/false是否通过验证.
例:
$this->load->library('form_validation');
$this->form_validation->set_rules('name', 'Name', 'required');
$this->form_validation->set_rules('email', 'Email', 'required|valid_email');
//........
if ($this->form_validation->validate())
// Process data
else
$this->register_form(); //A controller action that will show a view with errors
Run Code Online (Sandbox Code Playgroud)
这应该放在控制器或模型中吗?
Wes*_*rch 72
理想情况下,您需要3层验证:
Nem*_*den 19
验证是Model的问题.只有模型知道您的数据应该是什么样子.您在模型中描述了数据字段,因此您应该在同一位置描述此字段的验证规则.
对我来说这似乎很明显,但我很乐意听取对手的意见.
小智 12
我想说在大多数情况下,表单验证代码应该在控制器(而不是模型)中.
Madmartigan在上面的评论中说得最好"表单验证!==数据验证.并非所有表单都与模型交互"
Web表单在逻辑上是MVC的View/Controller部分的一部分,因为用户在视图中与它们交互.
似乎每个人总是说模型提到这个问题,这有其优点(与相反的情况相比),但我认为这个问题的答案更为微妙.应该在模型上执行数据本身的验证.
但是还有其他类型的验证,例如表单是否已经提交了意外字段(显然是出于安全目的),或者用户是否有权请求操作.通过在模型中放置这些类型的验证,它可以粘合模型(数据的抽象)以完全分离事物,例如用户系统如何工作或如何为安全目的评估表单提交.
您可以想象更改其中一个类或类系统,然后弄乱,因为您还必须更改所有模型.而控制器是客户端输入和数据之间的中介:在该角色中,它们是上述示例的适当验证器,可能还有许多其他验证器.
| 归档时间: |
|
| 查看次数: |
16351 次 |
| 最近记录: |