我有自定义表单类型示例:
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
));
}
}
如何在路线中生成绝对网址(如http://example.com/admin/check_form)?
$this->generateUrl()
不起作用,请原谅,它不是控制器,$this->get('router')->generate()
也不起作用,我不知道为什么。
答案 0 :(得分:13)
有两种方法可以做到:
在控制器中创建表单时,将操作作为选项传递:
$form = $this->createForm(new FormType(), null, array('action' => $this->generateUrl('your_route', array(/* your route parameters */), true));
请注意,您必须将true
作为最后一个参数传递,以强制路由器生成绝对URL(正如您要求的Symfony< 2.8)。如果您使用的是Symfony3,请在评论中使用UrlGeneratorInterface::ABSOLUTE_URL
而不是Emilie建议的真实。
答案 1 :(得分:5)
您必须将FormType声明为服务,并使用服务容器添加路由器(服务ID:路由器),然后在您的FormType中:
$this->router->generate('your_route_name', [] /* params */, true /* absolute */);
这里是文档:http://symfony.com/doc/current/cookbook/form/create_custom_field_type.html