我想要做的很简单:
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,但是没有说明如何提交表单,所以我转到它谈论提交表单的部分,并尝试输入相关内容功能,但仍然无法工作。我找不到任何将这些部分放在一起的例子。)
答案 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);
}
}
}