簡體   English   中英

如何重寫FOSMessageBundle FormType或在您自己的應用程序MessageController中使用自定義表單?

[英]How to override FOSMessageBundle FormType or use a custom form in your own application MessageController?

為了覆蓋表單類型,我應用了類似的方法來覆蓋模板。 但這沒有用,這就是為什么我在這里問有沒有快速的解決方案來對新線程使用自定義形式? 順便說一句,我已經在應用程序中覆蓋了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()
                            )));
}

注意:上面的方法來自重寫的類,您可以從此文檔http://symfony.com/doc/current/cookbook/bundles/inheritance.html中了解如何重寫控制器。

為了確保主題永遠不是必填字段,我進行了其他更改,我覆蓋了FOSMessageBundle的config/validation.xml文件。 您可以通過將文件放在App/Resources/FOSMessageBundle/config/validation.xml來覆蓋它。 我打開它,然后注釋了該主題的代碼。 如果發現有幫助,請喜歡並享受解決方案:)

Imran,您的解決方案有效,但是據我了解,您覆蓋了供應商的方法-所以這是非常不好的做法。 使用此信息可以輕松解決您的任務: http : //symfony.com/doc/current/cookbook/bundles/inheritance.html

因此,您可以更改自己的子捆綁包中的任何類。 並保留供應商捆綁包以供進一步更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM