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

Validation 如何在您自己的应用程序MessageController中重写FOSMessageBundle FormType或使用自定义表单?,validation,symfony,overriding,message-bundle,Validation,Symfony,Overriding,Message Bundle,为了覆盖表单类型,我应用了类似的方法来覆盖模板。但这不起作用。这就是为什么我在这里问,有没有任何快速的解决方案来使用新线程的自定义表单?顺便说一下,我已经在我的应用程序中覆盖了MessageController。在做了大量搜索之后,我没有找到任何解决方案。所以,我决定自己试一试。我能想出一个快速的解决方案,如下所示 我想控制新的线程表单,我也不想使用任何主题,比如用户名和主体,这是我唯一需要的字段。为此,我做了以下工作: public function newThreadAction() {

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

在做了大量搜索之后,我没有找到任何解决方案。所以,我决定自己试一试。我能想出一个快速的解决方案,如下所示

我想控制新的线程表单,我也不想使用任何主题,比如用户名和主体,这是我唯一需要的字段。为此,我做了以下工作:

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()
                            )));
}
注意:上面的方法来自重写类,您可以从本文档中看到如何重写控制器


为了确保subject永远不是必填字段,我做了其他更改,覆盖了FOSMessageBundle的
config/validation.xml
文件。您可以通过将文件放置在
App/Resources/FOSMessageBundle/config/validation.xml
中来覆盖它。我打开它,然后为主题注释代码。如果您觉得这个解决方案很有用,请喜欢并享受它:)

Imran,您的解决方案是有效的,但据我所知,您覆盖了供应商提供的方法,因此这是非常糟糕的做法。 使用以下信息轻松解决您的任务:


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

你说得对,我已经覆盖了资源下的控制器和文件。但FormType重写不起作用。这就是我需要控制什么是必需的,什么不是必需的。