Мне нужно применить приобретенный шаблон к нашей информационной панели. В этом шаблоне формы регистрации , регистрации и забытого пароля находятся под одним и тем же представлением и переключаются между ними с помощью простого JQuery.
Я искал хороший, не слишком кричащий способ объединить все три формы в одну, но я подошел пустой.
Мои постоянные варианты (как я их вижу), и почему я не люблю их:
/app/Resources/FOSUserBundle/views/
, удалите часть {% extend %}
и {% include %}
в моем собственном окне входа в систему. Причина для неприязни: для меня это выглядит немного как быстро-грязное исправление – «эта часть не работает? Давайте ее сломаем!» 🙂 LoginAction
и RegisterAction
, используйте {% render %}
с параметрами в моем собственном LoginAction
входа в систему. Причина неприязни: расширение целого пакета и изменение двух разных контроллеров, чтобы изменить способ его отображения, выглядит как плохой MVC. Версия TL: DR: Я ищу способ без взлома, включая регистрацию, регистрацию и забытую форму пароля на одной странице.
Любая помощь будет принята с благодарностью!
Я нашел решение, с которым мне нравится мой текущий проект. Преимущества и недостатки предлагаемого решения:
Преимущества:
Недостатки:
* нужно только переопределить файл layout.html.twig
С учетом сказанного, вот что я сделал:
Оформить форму в шаблоне
Используйте встроенные контроллеры для визуализации форм, которые вам нужны:
<div> <h2>Login</h2> {{ render(controller('FOSUserBundle:Security:login', { embeddedForm: true})) }} </div> <div> <h2>Reset</h2> {{ render(controller('FOSUserBundle:Resetting:request', { embeddedForm: true})) }} </div>
Переопределить макет FOSUserBundle
Поскольку я использую маршруты, предоставляемые пакетом, мне пришлось переопределить файл шаблона макета FOSUserBundle, чтобы расширить стандартный макет моего приложения. Поскольку переопределенный файл макета FOSUserBundle расширяет файл макета основного приложения, макет будет повторяться для каждого вызова {{ render ... }}
. Чтобы этого избежать, нам необходимо динамически отключить расширенный файл макета. Вот как выглядит внешний файл макета:
{# app/Resources/FOSUserBundle/views/layout.html.twig #} {% if app.request.get('embeddedForm') %} {% set layout = 'AcmeBundle::layout-content.html.twig' %} {% else %} {% set layout = 'AcmeBundle::layout.html.twig' %} {% endif %} {% extends layout %} {% block content %} {% block fos_user_content %}{% endblock %} {% endblock %}
Создайте AcmeBundle::layout-content.html.twig file
Этот макет должен только отображать блок содержимого сценариев просмотра FOSUserBundle и такой короткий и простой:
{# src/Acme/DemoBundle/Resources/views/layout-content.html.twig #} {% block content %}{% endblock %}
Теперь формы будут хорошо отображаться со всеми зависимостями (CSRF и т. Д.). Однако отправка формы приведет вас к действиям FOSUserBundle.
Альтернативное решение: