2010-12-13 52 views
3

我一直在使用Magento & PHP CodeIgniter MVC约4个月。我有一个奇怪的问题,理解在哪里设置CodeIgniter & Magento的验证逻辑,只有当我考虑以非常合适的语义方式遵循MVC架构的真实性质&时。关于PHP和Magento验证的一般MVC问题

首先,我将开始与Magento的: -

说我有在Magento一个“Assignment”模块,它是关于球员&锦标赛两者。我有3种操作方法,在这个“Assignment”模块的控制器,在这里我需要检查&确认以下内容: -

  1. 玩家ID
  2. 比赛ID

该验证还需要在“Assignment”模块的Block类以及3个操作方法。
因此,我的查询是我应该在模块的Controller类还是Model类中编写上述2点的验证,因为我需要在Controller类中使用Block类&中的验证?

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

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

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

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

所以我在这方面的查询是,这是一个正确的方法&在什么情况下我应该把模型类中的会话验证的设置者&?

再次,在这种情况下,实际的MVC体系结构建议是什么?

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

我真的很困惑,关于这个&我有点困在这里。请在这里帮助我。任何解决方案/帮助非常感谢。提前谢谢了。

编辑: -

如果可能,请提供有关如何创建&写正确的验证,以抛出异常,与模型方法来定义实际的异常消息沿着一些Magento的代码?

回答

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