symfony2:生成表单,单个字段,使用提交的输入重定向到url

时间:2013-09-20 08:04:06

标签: forms symfony

我想要做的很简单:

1)带有提交按钮的单个输入框 2)我想根据输入采取任何输入和重定向用户,所以如果我的网站是www.example.com并且用户提交'test',那么我想重定向到www.example.com/test

但是,示例中缺少symfony2文档。我已经能够用这个构建我的表单:

class VariantType extends AbstractType
{
  public function buildForm(FormBuilderInterface $builder, array $options)
  {
            $builder
            ->add('urlId', 'text', array('label' => 'tiny.cc/'))
            ->add('Go', 'submit')
            ->getForm();
  }  

  public function getName()
  {
    return 'index';
  }

}

这会生成很好的东西,但我意识到我没有提交处理程序。我假设我需要一个'newAction函数,它接受请求,如文档的不同部分所述:

http://symfony.com/doc/current/book/forms.html

所以我试过了......

 public function newAction(Request $request){

    $form->handleRequest($request);

    if($form->isValid()){
      return $this->redirect($this->generateUrl('homepage_id'));
    }


  }

我的'homepage_id'路由处理路径,并在网址末尾输入'test'。我想我可以转发到我想要的网址,我的路由系统将处理所有内容,这将向您展示我的需求是多么基本。但上述似乎并不奏效。我也有一个validation.yml,但我不认为这是我真正的障碍。即使任何人都可以指出任何解释这类内容的文档,我也会很感激。 (symfony2文档只是没有帮助:它告诉我建议创建一个formbuilder,但是没有说明如何提交表单,所以我转到它谈论提交表单的部分,并尝试输入相关内容功能,但仍然无法工作。我找不到任何将这些部分放在一起的例子。)

2 个答案:

答案 0 :(得分:1)

您可以使用Routing placeholders根据用户输入处理重定向。

定义您的homepage_id路线:

homepage_id:
path:      /{slug}
defaults:  { _controller: YourBundle:YourController:yourAction }

在您的操作中,重定向到上述路线,如下所示:

$url = $this->generateUrl('homepage_id',
        array('slug' => $form->getData()->yourFIeldGetter())
    );

答案 1 :(得分:0)

使用表单模板,如上所述,可以在控制器中完成表单的处理。 (通常在Controller / DefaultController.php之类的东西下找到)。这是您定义行动的地方。令人困惑的是,当使用表单模板意味着我在表单命名空间中使用不同的文件名(Form / MyType.php)创建了一个文件。如果你这样做,那么你仍然可以在DefaultController.php中处理表单处理

http://symfony.com/doc/current/book/forms.html

然后你可以这样做:

if ($isInvalidUrlId) {
  if ($request->getMethod() == 'POST') {
    $form->bind($request);
    if ($form->isValid()) {
      // get form data
      $data = $form->getData();

      //if urlid exists in the database redirect to that url
      $checkurlqb = $em->createQueryBuilder();
      $isInvalidUrlId = self::checkUrlId($data->getUrlId(), $checkurlqb);
      //if is invalid redirect to general page
      if ($isInvalidUrlId) {
        $url = $this->generateUrl('homepage_id');
      }
      // if is not invalid, re
      else {
        $url = $this->generateUrl('homepage_id', array('id' => $data->getUrlId()));
      }

      return $this->redirect($url);
    }
  }
}