php - 关于 PHP 和 Magento 验证的一般 MVC 问题

标签 php codeigniter magento weblogic

我已经使用 Magento 和 PHP CodeIgniter MVC 大约 4 个月了。我在理解在哪里设置 CodeIgniter 和 Magento 的验证逻辑时遇到了一个特殊的问题,只有当我考虑遵循 MVC 架构的真实本质并以非常正确的语义方式时。

首先,我将从 Magento 开始:-

假设我在 Magento 中有一个“Assignment”模块,它与玩家和锦标赛有关。我有 3 个操作方法,在这个“Assignment”模块的 Controller 中,我需要在其中检查和验证以下内容:-

  1. 玩家编号
  2. 锦标赛编号

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/

相关文章:

magento - 向 OPC 添加步骤而不覆盖

php - 为什么 Code Igniter 无法检测到我的表单是通过 POST 提交的?

mysql - 从 codeigniter 中的 mysql 导出 excel 中的数据

php - CodeIgniter 删除给定数组中的 where 条件和 where not

php - 如果第一个表中不存在,我想从第二个表中获取数据

magento - 为自定义类别属性启用所见即所得编辑器

php - mysql 用一条语句更新数千行

PHP点击计数器

javascript - 如何用一个提交按钮一个接一个地发布ajax?

PHP .htaccess 重写 url