为了覆盖表单类型,我应用了用于覆盖模板的类似方法。但这不起作用。这就是为什么我在这里问是否有任何快速解决方案可以将自定义表单用于新线程?顺便说一句,我已经在我的应用程序中覆盖了 MessageController。
问问题
633 次
2 回答
0
伊姆兰,您的解决方案有效,但据我了解,您覆盖了供应商的方法 - 所以这是非常糟糕的做法。使用此信息很容易解决您的任务:http: //symfony.com/doc/current/cookbook/bundles/inheritance.html
因此,您可以更改自己的子包中的任何类。并留下供应商捆绑包以进行进一步更新。
于 2014-09-12T18:29:48.360 回答
0
经过大量搜索,我没有遇到任何解决方案。所以,我决定自己试一试。我能够想出一个快速的解决方案,如下所示。
我想控制新的线程形式,我也不想把任何主题作为我唯一必填字段的用户名和正文。为此,我执行了以下操作:
public function newThreadAction() {
//$form = $this->container->get('fos_message.reply_form.factory')->create($thread);
//the line below allows me to override the form as I want. As I commented the original one
$form = $this->container->get('form.factory')->create(new \My\Bundle\Form\Type\NewThreadMessageFormType());
$form->handleRequest($request);
if ($form->isValid()) {
//process data according to your requirements
}
return $this->container->get('templating')->renderResponse('FOSMessageBundle:Message:newThread.html.twig', array_merge(array(
'form' => $form->createView(),
'data' => $form->getData()
)));
}
注意:上面的方法来自被覆盖的类,你可以从这个文档http://symfony.com/doc/current/cookbook/bundles/inheritance.html看到如何覆盖控制器
我为确保主题永远不是必填字段所做的其他更改,我覆盖了 FOSMessageBundle 的config/validation.xml
文件。您可以通过将文件放在App/Resources/FOSMessageBundle/config/validation.xml
. 我打开它,然后注释了主题的代码。如果您发现它有帮助,请喜欢并享受该解决方案:)
于 2014-09-08T23:29:55.797 回答