суббота, 30 октября 2010 г.

Формы в Symfony2. Отображение формы.

Итак, если вы прочитали предыдущие две части, то нам осталось отобразить нашу форму на старнице.

Т.к. в контроллере мы указали, что форма передаётся в шаблон под названием user, в папке Hello, давайте теперь создадим его. Переходим в папку Resources/views и создаём в папке Hello шаблон user.php. Добавим в него следующее



<?php $view->extend('HelloBundle::layout.php')?>
<form id="login_form" action="#" method="post">
   <div class="form-row">
     <?php echo $form['name']->label('Name'); ?>:
       <div class="form-row-content">
        <?php echo $form['name']->errors();?>
        <?php echo $form['name']->widget(); ?>
       </div>
    </div>
   <div class="form-row">
     <?php echo $form['surname']->label('Name'); ?>:
       <div class="form-row-content">
          <?php echo $form['surname']->errors(); ?>
          <?php echo $form['surname']->widget(); ?>
       </div>
    </div>    <?php echo $form->hidden() ?>   <input type="submit" value="Submit" name="submit" />
</form>

Вот и всё. Теперь, чтобы узнать была ли отправлена форма, добавим в экшн нашего контроллера следующее.

<?php

//метод контроллера
 public function  userAction(){
   ...
   //проверям была ли отправлена форма
   if ($this['request']->getMethod() == 'POST'){
     //берем данные из глобального массива POST
     //заметьте, что все поля содержаться в массиве user
     $request = $this['request']->request->get('user');
     $form->bind($request);
     if ($form->isValid()){//проверяем валидна ли форма
       //do something
     }
   }
 }
 

Думаю, что на этом можно закончить.
P.S. Ещё пару слов о представлении формы.
//вывод тега формы
<?php echo $form->form('#') ?>
 
Очень интересный метод widget
//вывод тега
<?php echo $form['title']->widget() ?>
 
В качестве параметров принимет
1-ый параметр массив с атрибутами. Можно установить стиль для поля
//вывод тега
<?php echo $form['title']->widget(array('class' => 'required')) ?>
 
2-ой параметр это шаблон который будет выводить данное поле. Указывается так же как и шаблон в контроллере.
<?php echo $form['captcha']->widget(array(), 'RecaptchaBundle:Field:recaptcha_field.php'); ?>
Вывод всех полей формы
<?php echo $form->render() ?>
Вывод скрытых полей. Внимание! В любом случае прописывайте это, даже если у вас отсутсвуют скрытые поля, т.к. Symfony2 добавляет поле token без которого ваша форма не пройдёт валидацию.
//вывод скрытых полей
<?php echo $form->hidden() ?>
Более подробную информацию об отображении форм вы можете найти здесь
P.P.S.
Формы оказались ну уж очень объемным материалом. Поэтому to be continued. В следующей части мы рассмотрим группы в формах.

Комментариев нет:

Отправить комментарий