路线名称中的变量

时间:2013-05-28 18:01:31

标签: symfony

我正在编写三个简单的表单处理函数。它们都是相同的,除了验证检查后的部分,所以我决定创建一种“模板”函数,包含整个代码,直到验证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抛出错误,找不到路线......我也尝试了其他一些组合但没有工作......我应该怎样处理这个?


这种“模板”形式是否过程中的方法o.k.?我认为它可能会减少重复次数,但是如果我在验证部分之前有一个应该有不同代码的方法呢?


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

1 个答案:

答案 0 :(得分:0)

首先,路线名称应该是:foocontroller_template或其他。

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

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

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

显然,通过这种方式,你必须进行参数化 - 并因此使其成为动态的 - 你的行动。