有关PHP和Magento验证的一般MVC问题

Kno*_*ing 3 php weblogic codeigniter magento

我一直在使用Magento和PHP CodeIgniter MVC大约4个月.我有一个特殊的问题,理解在哪里设置CodeIgniter和Magento的验证逻辑,只有当我考虑遵循MVC架构的真实性质并以非常恰当的语义方式.

首先,我将从Magento开始: -

假设我Assignment在Magento中有一个" "模块,它与玩家和锦标赛都有关.我有3个动作方法,在这个" Assignment"模块的控制器中,我需要检查并验证以下内容: -

  1. 玩家ID
  2. 锦标赛ID

" Assignment"模块的Block类以及3种操作方法中也需要进行此验证.
所以我的查询是应该在这个模块的Controller类或Model类中编写上述2点的验证,因为我需要在Block类和Controller类中使用验证?

在这种情况下,实际的MVC架构也提出了什么建议?

如果可能,请提供代码段,突出显示您的实施逻辑.

关于CodeIgniter或任何其他PHP MVC框架: -

由于任何使用会话的验证都是特定于页面的,因为CodeIgniter中没有Blocks的概念,所以通常会话验证和会话变量的设置仅在Controller类中完成.

所以我在这方面的问题是,这是一种正确的方法,在什么情况下我应该在Model类中放置会话和会话验证的设置者?

而且,在这种情况下,实际的MVC架构会提出什么建议呢?

如果可能的话,请再次提供代码片段,突出显示您的实现逻辑.

关于这一点,我真的处于困惑状态,而且我有点陷入困境.请帮帮我.非常感谢任何解决方案/帮助.提前谢谢了.

编辑:-

如果可能的话,请提供一些关于如何使用模型方法中定义的实际异常消息创建和编写正确的验证以及抛出异常的Magento代码?

Jos*_*tey 5

Model层应该能够保持自己的一致性,因此无论其他决策如何,都应该在Model层中包含验证.为了帮助用户(并提供更有用的验证消息),您可能还希望在控制器级别进行一些验证.

这种方法的优点是,假设您维护模型层,流氓控制器不可能设置错误数据.这就是你的第二个问题,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();
}
Run Code Online (Sandbox Code Playgroud)