Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于PHP的一般MVC问题&;Magento验证_Php_Codeigniter_Magento_Weblogic - Fatal编程技术网

关于PHP的一般MVC问题&;Magento验证

关于PHP的一般MVC问题&;Magento验证,php,codeigniter,magento,weblogic,Php,Codeigniter,Magento,Weblogic,我已经使用Magento&PHP CodeIgniter MVC大约4个月了。我有一个特殊的问题,知道在哪里设置CODENITER和MaGeNTO的验证逻辑,只有当我考虑遵循MVC架构到它的真实本质和非常适当的语义方式。 首先,我将从Magento开始: 假设我在Magento中有一个“作业”模块,它是关于球员和比赛的。在这个“分配”模块的控制器中,我有3种操作方法,我需要检查和验证以下内容:- 玩家ID 比赛ID 在“赋值”模块的块类中,以及在3个动作方法中,也需要进行此验证。 因此,我的问题

我已经使用Magento&PHP CodeIgniter MVC大约4个月了。我有一个特殊的问题,知道在哪里设置CODENITER和MaGeNTO的验证逻辑,只有当我考虑遵循MVC架构到它的真实本质和非常适当的语义方式。 首先,我将从Magento开始:

假设我在Magento中有一个“
作业
”模块,它是关于球员和比赛的。在这个“
分配
”模块的控制器中,我有3种操作方法,我需要检查和验证以下内容:-

  • 玩家ID
  • 比赛ID
  • 在“
    赋值
    ”模块的块类中,以及在3个动作方法中,也需要进行此验证。
    因此,我的问题是,我应该在这个模块的控制器类还是模型类中编写上述两点的验证,因为我需要在Block类和Controller类中使用验证

    在这种情况下,实际的MVC体系结构有什么建议

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

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

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

    因此,我在这方面的疑问是,这是一种正确的方法&在什么情况下,我应该在模型类中放置会话和会话验证的设置器

    再说一次,在这种情况下,实际的MVC架构意味着什么

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

    关于这件事我真的很困惑&我有点困在这里了。请帮我进来。非常感谢任何解决方案/帮助。非常感谢

    编辑:-


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

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

    这种方法的优点是,假设您维护模型层,则流氓控制器不可能设置坏数据。这就涉及到了第二个问题,对于这个问题,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();
    }