Как переопределить FOSMessageBundle FormType или использовать пользовательскую форму в вашем собственном приложении MessageController?

Чтобы переопределить тип формы, я применил аналогичный подход для переопределения шаблонов. Но это не сработало. Вот почему я спрашиваю, есть ли какое-нибудь быстрое решение использовать пользовательскую форму для новых тем? Кстати, я переопределяю MessageController уже в моем приложении.

2 ответа

После долгих поисков я не нашел ни одного решения. Итак, я решил попробовать сам. И мне удалось найти быстрое решение, которое приведено ниже.

Я хотел получить контроль над новой формой потока, и я также хотел не принимать никакой темы, как имя пользователя и тело, где мои единственные обязательные поля. Для этого я сделал следующее:

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, Я открыл его, а затем прокомментировал код для темы. Нравится и нравится решение, если вы нашли его полезным:)

Имран, ваше решение работает, но, как я понял, вы переопределяете метод от поставщика - так что это очень плохая практика. Это легко решить вашу задачу с этой информацией: http://symfony.com/doc/current/cookbook/bundles/inheritance.html

Таким образом, вы можете изменить любые классы в своем собственном дочернем пакете. И оставьте пакет поставщика для дальнейших обновлений.

Другие вопросы по тегам