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

时间:2010-12-13 12:12:51

标签: php codeigniter magento weblogic

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

首先,我将从Magento开始: -

说我在Magento有一个“Assignment”模块,这是关于玩家&比赛两个。我有3个动作方法,在这个“Assignment”模块的控制器中,我需要检查&验证以下内容: -

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

    在这种情况下,实际的MVC架构还有什么建议?

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

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

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

    所以我在这方面的问题是这是一个正确的方法&在什么情况下我应该安排会议和安排Model类中的会话验证?

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

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

    对于这个和我来说,我真的处于困惑状态。我有点被困在这里。请帮帮我。非常感谢任何解决方案/帮助。非常感谢提前。

    编辑: -

    如果可能,请提供一些Magento代码,了解如何创建&使用模型方法中定义的实际异常消息编写适当的Validations以及抛出异常?

1 个答案:

答案 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();
}