我使用服务在我的网站上获取基本搜索表单。我需要将操作表单设置为搜索结果页面。我可以将表单操作设置为特定的URL(/ search),但不能在yaml中使用类似“generateUrl”的方法。
我希望能够在开发环境/app_dev.php以及prod环境中测试我的表单。有什么建议或想法吗?
services.yml
parameters:
form.search.default.value: "search for things"
services:
app_bundle.form.type.search:
class: AppBundle\Form\SearchType
arguments: [AppBundle\Entity\Search]
tags:
- { name: form.type, alias: tab_search }
app_bundle.form.search:
factory_method: create
factory_service: form.factory
class: Symfony\Component\Form\Form
arguments:
- tab_search
- @app_bundle.form.entity.search
- { action: /search } # I'd like something similar to $this->generateUrl("search")
app_bundle.form.entity.search:
class: AppBundle\Entity\Search
arguments: [%form.search.default.value%]
DefaultController.php
/**
* @Route("/", name="homepage")
* @Template()
*/
public function indexAction(Request $request)
{
$form = $this->get('app_bundle.form.search');
// [...]
return array('search' => $form->createView());
}
答案 0 :(得分:0)
未经测试,但我之前使用此代码做过类似的事情:
protected $action;
public function setAction($action)
{
$this->action = $action;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
// rest of form configuration
$builder->setAction($this->action);
}
然后在你的services.yml:
services:
app_bundle.form.type.search:
class: AppBundle\Form\SearchType
arguments: [AppBundle\Entity\Search]
calls:
- [setAction, ["%app_bundle.form.type.search.action%"]]
tags:
- { name: form.type, alias: tab_search }
然后在某处的参数中设置app_bundle.form.type.search.action
值。
如果要允许覆盖该方法但设置默认值,请在action
中设置setDefaultOptions
,然后从控制器或侦听器覆盖。