2012-06-28 4 views
1

Symfony2 и FOS Bundle Пользователь выпуск ...Variable «csrf_token» не существует в :: base.html.twig

Я выполнил свою собственную форму входа в голове страницы (с помощью Bundle FOS пользователя, как по направлениям в http://forum.symfony-project.org/viewtopic.php?f=31&t=37767.)

Теперь, у меня есть сообщение об ошибке

Variable "csrf_token" does not exist in ::base.html.twig 

Кто-то на этом форуме (URL выше) был точно такой же вопрос, и решить его, поместив в скрытом поле CSRF как это

<input type="hidden" name="_csrf_token" value="{{ csrf_token }}" /> 

Моя проблема заключается в том, что она работает нормально, когда она находится на пути/логина, но мне не нужна эта отдельная страница входа, я хочу, чтобы моя форма была встроена в заголовок страницы, и кажется, что {{ csrf_token}} доступен только, когда страница отображается контроллером входа ...

Кроме того, как мне получить сообщения об ошибках (вспышки) там, я предполагаю, что я должен включить контроллер входа в мой контроллер по умолчанию, каждый раз получать все эти переменные, или ...? Или я должен вместо этого визуализировать контроллер userBundle в этой части заголовка вместо того, чтобы вставить в него часть шаблона UserBundle?

ответ

6

Если вы создаете свою собственную форму входа с помощью компонента Form, то у вас уже должен быть токен csrf как скрытое поле. Причина, по которой переменная csrf_token доступна только для входа/входа, связана с тем, что контроллер входа в систему FOSUserBundle по умолчанию не использует форму, вместо этого они просто генерируют токен csrf вручную, как показано here, и передают его в представление.

Итак, либо убедитесь, что вы рендеринг всех скрытых полей на форме с чем-то вроде {{ form_rest(form) }} или генерировать csrf_token вручную подобно FOSUserBundle делает here и сделать его с кодом у вас уже есть.

0

Чтобы создать рабочий контроллер csrf с вашего контроллера, пожалуйста, see a previous post.

Этот пример позволил мне исправить проблему, с которой вы столкнулись. Пусть это будет ссылка на кого-либо еще, расширяющего форму FOS User bundle.