2013-05-18 4 views
0

У меня есть простая форма на всех страницах сайта: имя пользователя, пароль, [Вход]Форма сайта с Symfony2?

Я пытался сделать с простым HTML, но я получаю

The CSRF token is invalid. Please try to resubmit the form 

Идеи сделать форму в каждом действии кажется Плохо. Какова хорошая практика создания общесистемных форм?

ответ

1

Вы должны сделать это таким образом:

Во-первых, Я предполагаю, что у вас есть файл базового шаблона, такой как layout.html.twig, и все остальные страницы расширяют его. Например:

// Resources/views/layout.html.twig 

<doc ... bla blah> 
<title>My site</title> 
...(js, css)... 
<body> 
    <div id="top"> 
     {% render url("site_wide_form") %} 
    </div> 


{% block content %} 
{% endblock content %} 
</body> 

Вам нужно контроллер, который будет обрабатывать вашу форму:

//Controller/SitewideController.php 

/** 
* @Route("/some/url/here", name="site_wide_form") 
* @Template("yourbudle:folder:site_wide_form.html.twig") 
*/ 
public function someAction() 
{ 
    ..... your code for form, process submission etc ... 
    return ["form"=>$form->createView()] ; 
} 

и файл шаблона:

// site_wide_form.html.twig 

<form action="{{ path("site_wide_form") }}" method="post"> 
{{ form_widget(form) }} 
</form> 

Вот так. Прочтите это, чтобы понять тег рендеринга: http://symfony.com/doc/2.2/book/templating.html#embedding-controllers

+0

спасибо. выглядит так, как я хотел – luchaninov

0

Тонер CSRF отсутствует. В вашем шаблоне (я предполагаю, что вы используете Twig). Вы можете сказать, Symfony2, чтобы сделать все остальные элементы формы с помощью:

{{ form_rest(form) }} 

Или вы можете сделать только маркер CSRF:

{{ form_row(form._token) }} 
+0

Переменная «форма» не существует в .... html.twig в строке 74 Я понимаю, что это потому, что я делаю чистый HTML, а не создавая форму. Но создать объект формы в каждом действии представляется неправильным. – luchaninov

Смежные вопросы