我已经使用 Magento 和 PHP CodeIgniter MVC 大约 4 个月了。我在理解在哪里设置 CodeIgniter 和 Magento 的验证逻辑时遇到了一个特殊的问题,只有当我考虑遵循 MVC 架构的真实本质并以非常正确的语义方式时。
首先,我将从 Magento 开始:-
假设我在 Magento 中有一个“Assignment
”模块,它与玩家和锦标赛有关。我有 3 个操作方法,在这个“Assignment
”模块的 Controller 中,我需要在其中检查和验证以下内容:-
- 玩家编号
- 锦标赛编号
“Assignment
”模块的 Block 类以及 3 个操作方法中也需要此验证。
所以我的问题是我应该在这个模块的 Controller 类或 Model 类中编写上述两点的验证,因为我需要在 Block 类和 Controller 类中都使用验证?
此外,在这种情况下,实际的 MVC 架构有何建议?
如果可能,请提供代码片段,突出显示您的实现逻辑。
关于 CodeIgniter 或任何其他 PHP MVC 框架:-
因为任何使用 session 的验证都是特定于页面的,并且因为在 CodeIgniter 中没有 block 的概念,所以通常 session 验证和 session 变量的设置只在 Controller 类中完成。
所以我在这方面的问题是,这是一种正确的方法吗?在什么情况下我应该将 session 和 session 验证的 setter 放在模型类中?
再一次,在这种情况下,实际的 MVC 架构意味着什么?
同样,如果可能,请提供代码片段,突出显示您的实现逻辑。
对此我真的很困惑,而且我有点被困在这里。请在这里帮助我。非常感谢任何解决方案/帮助。非常感谢。
编辑:-
如果可能,请提供一些 Magento 代码,说明如何创建和编写正确的验证以及抛出异常,以及在模型方法中定义的实际异常消息?
最佳答案
模型层应该能够保持其自身的一致性,因此无论其他决定如何,您都应该在模型层中包含您的验证。为了帮助用户(并提供更有帮助的验证消息),您可能还希望在 Controller 级别进行一些验证。
这种方法的优点是,假设您维护模型层,流氓 Controller 就不可能设置错误数据。这涉及到您的第二个问题,Magento 的答案是使用一个对象来管理部分 session 中的数据,并在进入 session 的过程中验证该数据。
顺便说一句,要处理 block / View 中的验证,请考虑使用这样的验证。它有其自身的缺陷,但通常可以最大限度地减少您必须编写的验证代码的数量:
// 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();
}
关于php - 关于 PHP 和 Magento 验证的一般 MVC 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4428683/