Anc*_*end 9 forms url get formbuilder symfony
我一直试图用一个输入创建一个非常基本的symfony表单(用于搜索功能).它在提交时使用GET方法.它似乎按预期工作,但它会生成一个非常丑陋和不必要的长URL.我一直试图"清理"网址已经有一段时间了,我想知道是否有人遇到同样的问题而且知道如何修复它?
形成
$form = $this->createFormBuilder($search)
->setMethod('GET')
->add('q', 'text')
->add('search', 'submit')
->getForm();
Run Code Online (Sandbox Code Playgroud)
提交表单时会生成以下URL:
search?form[q]=red+apple&form[search]=&form[_token]=bb342d7ef928e984713d8cf3eda9a63440f973f2
Run Code Online (Sandbox Code Playgroud)
所需网址:
search?q=red+apple
Run Code Online (Sandbox Code Playgroud)
提前致谢!
hco*_*oat 17
要创建所需的URL,您必须使用createNamedBuilder哪个来设置表单名称''.要删除_token您需要设置csrf_protection为false.请查看csrf保护,以确保您知道如果关闭它会发生什么.
将代码更改为以下内容可以为您提供所需的结果.
$form = $this->get('form.factory')->createNamedBuilder('', 'form', $search, array(
'csrf_protection' => false,
))->setMethod('GET')
->add('q', 'text')
->add('search', 'submit')
->getForm();
Run Code Online (Sandbox Code Playgroud)
这应该产生如下的URL:
search?q=red+apple&search=
Run Code Online (Sandbox Code Playgroud)
编辑:
如果你想摆脱的&search=,一个办法是改变search从submit到button.
->add('search', 'button')
Run Code Online (Sandbox Code Playgroud)
这将需要javascript来提交您的表单.这是jquery中的简单示例:
//This assumes one form and one button
$(document).ready(function(){
$('button').click(function(){
$('form').submit();
});
});
Run Code Online (Sandbox Code Playgroud)
这将生成一个URL,如:
search?q=red+apple
Run Code Online (Sandbox Code Playgroud)
要访问GET变量,请在控制器中输入以下内容:
public function yourSearchAction(Request $request)
{
// your code ...
$form->handleRequest($request);
if ($form->isValid()) {
$getVars = $form->getData();
$q = $getVars['q'];
$page = $getVars['page'];
$billing = $em
//Do something
}
return //your code
}
Run Code Online (Sandbox Code Playgroud)
只是为了澄清您是否要添加page到您的URL,您需要将其添加到您的表单:
->add('page', 'text')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5305 次 |
| 最近记录: |