1

我正在编写三个简单的表单处理函数。除了验证检查之后的部分之外,它们都是相同的,所以我决定创建一种“模板”函数,其中包含直到验证 if 指令的整个代码。

因此,这三个函数只包含负责正确处理表单的代码。

模板函数看起来像这样:

public function templateAction($formName) {
   $form = $this->createForm(new {$formName.'Type'}() new $formName());
   $request = $this->getRequest();
   if($request->getMethod() == 'POST') {
      $form->bind($request);
      if($form->valid()) {
         $this->{'set'.$formName}($form);
         return array();
      }
   }
}

现在,有了Foo表单,将其名称 (Foo) 作为参数传递,我得到了仅基于其名称呈现的表单,以及包含该名称的相应私有方法。


问题是- 我如何使用$this->redirect()函数来调用这个“模板”方法并传递正确的参数?

/**
 * @Route("/FooController/Template/{formName}", name="/FooController/Template/{formName}")
 */

这不起作用 - sf 抛出一个找不到路线的错误......我也尝试了一些其他组合,但没有奏效......我应该如何处理这个?


这种“模板”表单处理方法可以吗?我认为它可能会减少重复,但是如果我有一种方法应该在验证部分之前有不同的代码呢?


另外,有没有办法将表单处理与控制器分开,并将其放在其他地方?

4

1 回答 1

0

首先,路线名称应该类似于:foocontroller_template或其他。

/**
 * @Route("/FooController/Template/{formName}", name="/FooController/Template/{formName}")
 */

其次,如果你->redirect()在控制器中调用方法,你必须——作为一个好习惯——让路由器为你生成路由,比如

$this->get('router')->generate('foocontroller_template', array('formName' => 'foobarform'));

显然,通过这种方式,您还必须参数化 - 并因此使其动态化 - 您的动作。

于 2013-05-28T19:57:31.833 回答