symfony 1.4 - 如何跨模块重用验证方法

时间:2013-07-29 12:33:52

标签: symfony-1.4

我在module1 / actions.php中有一个非常复杂的验证方法,它来自module1 / executeMyAction

我想在module2中重用它,而不是复制非常相似的代码。

感觉我应该使用一个组件或类似的东西,但我不需要从模板调用validate我需要将其作为module1 / executeMyAction或module2 / executeMyAction的一部分调用,这样我就可以设置各种变量用于执行executeMyActionSuccess.php模板。

任何人都可以让我知道我应该如何重用这个验证码,我考虑将其移到表单类中,但这只是意味着我无法设置模板变量而且它似乎打破了MVC结构,所以我对此不满意。

非常感谢任何指导。

1 个答案:

答案 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文档中创建自定义验证器的信息。