2014-06-27 34 views
5

我有例如自定义表单类型:如何在自定义表单类型中生成绝对URL?

namespace Acme\SimpleBundle\Form\Type; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolverInterface; 

class ExampleType extends AbstractType 
{ 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 

     $builder->setAction(****-----GENERATE-ROUTE-ABSOLUTE-URL-HERE-----****) 
       ->add('email', 'text') 
       ->add('send', 'submit'); 
    } 

    public function getName() 
    { 
     return 'example'; 
    } 

    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'error_bubbling' => true 
     )); 
    } 

} 

怎样才能绝对URL(如http://example.com/admin/check_form)到我的路线?

$this->generateUrl()不起作用,因为它不是一个控制器,并且$this->get('router')->generate()也不起作用,我不知道为什么。

+0

Afaik您可以将URL添加为字符串。没有什么需要产生,因为它不依赖任何东西,这是绝对的。我假设你是指你的项目之外的东西。 – colburton

+0

那么,它应该是动态的,根据当前放置应用的域和目录。 – user3783550

+0

如果它与您的项目有关,则必须有一个路线和一个控制器/操作。否则,发电机将不知道这应该指向哪里。 – colburton

回答

12

有两种方法可以做到这一点:

  • 注册表单类型的服务,并注入其中的路由器:doc
  • ,当你在你的控制器创建表单通过你的行动选项:

    $form = $this->createForm(new FormType(), null, array('action' => $this->generateUrl('your_route', array(/* your route parameters */), true)); 
    

    注意,必须以强制路由器生成一个绝对URL传递true作为最后一个参数(如你要求的Symfony < 2.8)。如果您使用的是Symfony3,请使用UrlGeneratorInterface::ABSOLUTE_URL而不是正如Emilie在评论中所建议的那样。

+2

从Symfony 2.8开始,您必须对referenceType参数使用'UrlGeneratorInterface :: ABSOLUTE_URL'而不是'true',否则会得到不推荐的错误 – Emilie

相关问题