Symfony 在窗体侦听器中修改窗体操作

Symfony 在窗体侦听器中修改窗体操作,symfony,symfony-2.5,Symfony,Symfony 2.5,我有一个如下定义的表单侦听器 class GenerateFormActionSubscriber implements EventSubscriberInterface { public static function getSubscribedEvents() { return array(FormEvents::PRE_SET_DATA => 'preSetData'); } public function preSetData(Fo

我有一个如下定义的表单侦听器

class GenerateFormActionSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return array(FormEvents::PRE_SET_DATA => 'preSetData');
    }

    public function preSetData(FormEvent $event)
    {
        $data = $event->getData();
        $form = $event->getForm();

        if ($data || null !== $data->getId()) {
        $form->getConfig()->setAction('a_route_to_be_generated');
        }
    }
}
事件已正确触发,我收到此错误

无法再修改配置生成器

我需要根据实体数据生成路由。
如何修改操作有什么建议吗?(何时?由于配置已锁定,似乎为时已晚)

你可以在你的控制器中执行,或者在你的模板中执行,或者在将在你的模板中生成它的
Twig\u扩展中执行。你是对的,但很快我会添加更多的业务逻辑,因此我希望使我的控制器和Twig尽可能精简。因此,你可以创建一个生成路径的服务,您在
Twig\u扩展中调用它
,这意味着您只能在模板中使用类似
generate\u path(object)
的内容。这样,业务逻辑都在一个服务中,因此它在任何地方都可用,并且您的模板和控制器(相对而言)保持不变。