FOSUserBundle: встраивание формы входа и выбор ее шаблона - PullRequest
8 голосов
/ 07 ноября 2011

Я хочу вставить форму входа FOSUserBundle в мой шаблон, как это:

<div id="sidebar">
     {% render "FOSUserBundle::Security::login" %}
</div> 

, но не для отображения шаблона, который вызывается в коде loginAction () первоначально.

Я подумал, что мне пригодится возможность передачи шаблона Я хочу сделать как параметр 'max' в этом примере:

<div id="sidebar">
    {% render "AcmeArticleBundle:Article:recentArticles" with {'max':
3} %}
</div>

Это возможно в symfony2? Если нет ..

я должен создать еще одно действие для своего пакета с тем же кодом внутри логин действия? или же я должен изменить исходный код входа в систему и записать элемент управления структуры?

if(currentPage == 'home')
 renderResponse('template1')
else
renderResponse('template2')

Ответы [ 4 ]

36 голосов
/ 21 июня 2013

Вы можете создать частичный элемент для хранения вашей простой HTML-формы, например, такой простой:

<form action="{{ path("fos_user_security_check") }}" method="post">
  <label>Email</label>
  <input type="text" name="_username" required="required" />

  <label>Password</label>
  <input type="password" name="_password" required="required" />

  <button type="submit">Submit</button>
</form>

Тогда в свой макет просто включите новый партиал:)

Если вам нужен токен csrf (который настоятельно рекомендуется), просто определите провайдера как глобальную переменную Twig:

twig:
    globals:
        fos_csrf_provider: "@form.csrf_provider"

Затем просто добавьте скрытое поле ввода в форму:

  <input type="hidden" name="_csrf_token" value="{{ fos_csrf_provider.generateCsrfToken('authenticate') }}" />
10 голосов
/ 15 октября 2013

Вы должны указать, что вызываете контроллер

{{ render(controller('FOSUserBundle:Security:login')) }}
1 голос
/ 14 января 2015

Поскольку на часть, включающую ошибку, здесь не было ответа, и мне пришлось копаться в коде FOSUserBundle, позвольте мне также добавить к этому сообщению, как добавить сообщения об ошибках в форму loginPartial.html.twig:

Посмотрите на файл /vendor/friendsofsymfony/user-bundle/Controller/SecurityController.php

Этот контроллер имеет loginAction, который создает переменную ошибки.Все, что вам нужно сделать в контроллере, который вы используете для визуализации ветки loginPartial, это добавить в этот контроллер следующий код:

$session = $request->getSession();
    // get the error if any (works with forward and redirect -- see below)
    if ($request->attributes->has(SecurityContextInterface::AUTHENTICATION_ERROR)) {
        $error = $request->attributes->get(SecurityContextInterface::AUTHENTICATION_ERROR);
    } elseif (null !== $session && $session->has(SecurityContextInterface::AUTHENTICATION_ERROR)) {
        $error = $session->get(SecurityContextInterface::AUTHENTICATION_ERROR);
        $session->remove(SecurityContextInterface::AUTHENTICATION_ERROR);
    } else {
        $error = null;
    }

    return $this->render('YourDemoBundle:Default:index.html.twig', ['error' => $error]);

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

Теперь в веточку, которая показывает форму, просто добавьте следующее: {% include 'YourDemoBundle: Security: loginPartial.html.twig'%}

в файле loginPartial.html.twig введите следующее:

{% block fos_user_content %}
{% if error %}
    <div>{{ error.messageKey|trans(error.messageData, 'security') }}</div>
{% endif %}`Let the rest of the form be as is....and then endblock ofcourse..{% endblock fos_user_content %}`

Это должно сделать

0 голосов
/ 25 февраля 2012

- это один «двоеточие» между каждой частью

{% render "FOSUserBundle:Security:login" %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...