Symfony2:如何在services.yml中设置表单操作

时间:2015-03-25 22:32:44

标签: php forms symfony service

我使用服务在我的网站上获取基本搜索表单。我需要将操作表单设置为搜索结果页面。我可以将表单操作设置为特定的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());
        }

1 个答案:

答案 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,然后从控制器或侦听器覆盖。