我在module1 / actions.php中有一个非常复杂的验证方法,它来自module1 / executeMyAction
我想在module2中重用它,而不是复制非常相似的代码。
感觉我应该使用一个组件或类似的东西,但我不需要从模板调用validate我需要将其作为module1 / executeMyAction或module2 / executeMyAction的一部分调用,这样我就可以设置各种变量用于执行executeMyActionSuccess.php模板。
任何人都可以让我知道我应该如何重用这个验证码,我考虑将其移到表单类中,但这只是意味着我无法设置模板变量而且它似乎打破了MVC结构,所以我对此不满意。
非常感谢任何指导。
答案 0 :(得分:2)
如果要在操作之间共享代码的某些部分,可以创建一个自定义类,该类将实现您需要的某些方法。您可以将该类放在应用程序或整个项目的lib
目录中。
E.g。创建apps/frontend/lib/myUtil.class.php
class myUtil
{
public static function addNumbers($a, $b)
{
return $a + $b;
}
}
然后在你的行动中你可以使用:
$sum = myUtil::addNumbers(2, 3);
如果您的代码依赖于其他一些对象,那么最好不要实现静态方法,而是创建该类的对象。 E.g。
class myUtil
{
protected $request;
public function __construct(sfWebRequest $request)
{
$this->request = $request;
}
public function sumFromRequest()
{
return $this->request->getParameter('a') + $this->request->getParameter('b');
}
}
然后在你的行动中
public function executeSomething(sfWebRequest $request)
{
$util = new myUtil($request);
$this->sum = $util->sumFromRequest();
}
如果您的代码严格用于表单字段的验证,您可以创建一个自定义验证器,然后可以在表单中使用。 (这肯定是最好的解决方案)。您可以阅读有关在Symfony文档中创建自定义验证器的信息。