0

我想做的很简单:

1)带有提交按钮的单个输入框 2)我想接受任何输入并根据输入重定向用户,所以如果我的网站是 www.example.com 并且用户提交“测试”,那么我想重定向到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' 路由处理带有 url 末尾的 'test' 输入的路由。我想我可以转发到我想要的 url,我的路由系统会处理所有事情,这向你展示了我的需求是多么基本。但上面的方法似乎不起作用。我也有一个validation.yml,但我不认为这是我真正的障碍。即使有人可以指出任何解释此类内容的文档,我也会很感激。(symfony2 文档只是没有帮助:它告诉我建议创建一个表单构建器,但没有说明如何提交表单,所以我转到它讨论提交表单的部分,并尝试输入相关的功能,但仍然不起作用。我找不到任何将这些部分组合在一起的示例。)

4

2 回答 2

1

您可以使用路由占位符来处理基于用户输入的重定向。

定义你的homepage_id路线:

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

在您的操作中,像这样重定向到上述路线:

$url = $this->generateUrl('homepage_id',
        array('slug' => $form->getData()->yourFIeldGetter())
    );
于 2013-09-20T09:04:13.507 回答
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);
    }
  }
}
于 2013-09-20T21:07:25.253 回答