1

我在 module1/actions.php 中有一个非常复杂的验证方法,从 module1/executeMyAction 调用

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

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

谁能让我知道我应该如何重用这个验证代码,我考虑将它移到表单类中,但这只是意味着我不能设置模板变量,而且它似乎有点破坏 MVC 结构所以我不是对此感到高兴。

非常感谢任何指导。

4

1 回答 1

2

如果您想在操作之间共享某些代码部分,您可以创建一个自定义类,该类将实现您需要的一些方法。您可以将类放在lib应用程序或整个项目的目录中。

例如创建一个apps/frontend/lib/myUtil.class.php

class myUtil
{
    public static function addNumbers($a, $b)
    {
        return $a + $b;
    }
}

然后在您的操作中,您可以使用:

$sum = myUtil::addNumbers(2, 3);

如果您的代码依赖于其他一些对象,最好不要实现静态方法而是创建该类的对象。例如

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 文档中阅读有关创建自定义验证器的信息。

于 2013-07-29T16:35:05.457 回答