如何覆盖 FOSMessageBundle FormType 或在您自己的应用程序 MessageController 中使用自定义表单?

问题描述 投票:0回答:2

为了覆盖表单类型,我应用了用于覆盖模板的类似方法。但这不起作用。这就是为什么我在这里问是否有任何快速解决方案可以为新线程使用自定义表单?顺便说一句,我正在覆盖我的应用程序中已有的 MessageController。

php symfony validation overriding message-bundle
2个回答
0
投票

Imran,你的解决方案有效,但据我了解,你覆盖了供应商的方法 - 所以这是非常糟糕的做法。 使用以下信息可以轻松解决您的任务: http://symfony.com/doc/current/cookbook/bundles/inheritance.html

因此,您可以更改自己的子包中的任何类。并留下供应商捆绑包以供进一步更新。


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
来覆盖它。我打开它,然后评论主题代码。如果您发现它有帮助,请喜欢并享受该解决方案:)

© www.soinside.com 2019 - 2024. All rights reserved.