我一直在使用Magento& PHP CodeIgniter MVC大约4个月。我有一个特殊的问题,了解在哪里设置CodeIgniter和amp;的验证逻辑。 Magento,只有当我考虑遵循MVC架构的真实本质和以一种非常恰当的语义方式。
首先,我将从Magento开始: -
说我在Magento有一个“Assignment
”模块,这是关于玩家&比赛两个。我有3个动作方法,在这个“Assignment
”模块的控制器中,我需要检查&验证以下内容: -
“Assignment
”模块的Block类以及3种操作方法中也需要进行此验证。
所以我的查询是应该在这个模块的Controller类或Model类中编写上述2点的验证,因为我需要在Block类和&中使用验证。也在Controller类?
在这种情况下,实际的MVC架构还有什么建议?
如果可能,请提供代码段,突出显示您的实施逻辑。
关于CodeIgniter或任何其他PHP MVC框架: -
由于使用会话验证任何内容都是针对特定页面的&因为CodeIgniter中没有Blocks的概念,所以通常会话验证&会话变量的设置仅在Controller类中完成。
所以我在这方面的问题是这是一个正确的方法&在什么情况下我应该安排会议和安排Model类中的会话验证?
同样,在这种情况下,实际的MVC架构会提出什么建议?
如果可能的话,请再次提供代码片段,突出显示您实施的逻辑。
对于这个和我来说,我真的处于困惑状态。我有点被困在这里。请帮帮我。非常感谢任何解决方案/帮助。非常感谢提前。
编辑: -
如果可能,请提供一些Magento代码,了解如何创建&使用模型方法中定义的实际异常消息编写适当的Validations以及抛出异常?
答案 0 :(得分:5)
模型层应该能够保持自己的一致性,因此无论其他决策如何,都应该在模型层中包含验证。为了帮助用户(并提供更有用的验证消息),您可能还希望在控制器级别进行一些验证。
这种方法的优点在于,假设您维护模型层,恶意控制器不可能设置错误数据。这就是你的第二个问题,Magento的答案是使用一个对象来管理部分会话中的数据,并在进入会话的过程中验证这些数据。
顺便说一句,要处理块/视图中的验证,请考虑使用这样的验证。它有自己的缺陷,但通常最小化你必须编写的验证代码的数量:
// make sure that the below returns the relevant assignment model class
$assignment = $this->getAssignment(); // or get it via a session, or helper, or what have you.
$player = getChosenPlayer();
try {
$assignment->setPlayer($player); //throws exception when invalid
... do more ...
$assignmnent->save();
} catch(SomeException $e) {
addValidationError($e->getMessage());
renderPageAgain();
}