Symfony FOSUserBundle – включить форму входа в шаблон макета

Мы успешно настроили FOSUserBundle; логин, регистрация, сброс пароля и т. д., все работают нормально.

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

$this->container->get('form.csrf_provider')->generateCsrfToken('authenticate'); 

Я попробовал вызывать это в расширении Twig, которое в противном случае работает нормально, но, видимо, расширение не может правильно ссылаться на контейнер.

Конечно, есть какой-то простой способ получить маркер FOSUserBundle CSRF во всем мире?

Благодаря! Джейсон

Solutions Collecting From Web of "Symfony FOSUserBundle – включить форму входа в шаблон макета"

Вы можете определить такую ​​функцию в одном из ваших контроллеров

 public function getTokenAction() { return new Response($this->container->get('form.csrf_provider') ->generateCsrfToken('authenticate')); } 

а затем просто вставьте его в свою форму через

 <input type="hidden" name="_csrf_token" value="{% render('YourBundle:YourController:getToken') %}" /> 

Вам также необходимо включить следующее в верхней части вашего контроллера:

 use Symfony\Component\HttpFoundation\Response; 

Symfony 2.3:

Одним из возможных решений было бы определить поставщика csrf как глобальную переменную Twig следующим образом:

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

И тогда в вашем макете назовите это так:

 <input type="hidden" name="_csrf_token" value="{{ fos_csrf_provider.generateCsrfToken('authenticate') }}" /> 

Поэтому вам не нужно вызывать какой-либо контроллер.

Symfony 2.4 и более поздние версии:

 twig: globals: fos_csrf_provider: "@security.csrf.token_manager" 

а также:

 <input type="hidden" name="_csrf_token" value="{{ fos_csrf_provider.refreshToken('authenticate') }}" />