2016-08-18 3 views
0

Я думаю, что это просто.Форма Silex/Symfony - form_errors (форма) не работает в twig

У меня есть приложение Silex, с Symfony Form (с Validator).

Это часть моей формы:

return $this->factory->createBuilder(FormType::class) 
     ->add('holidayId', HiddenType::class, array()) 
     ->add('firstName', TextType::class, array(
      'label' => 'Il tuo nome' 
     )) 
     ->add('lastName', TextType::class, array(
      'label' => 'Il tuo cognome' 
     )) 
     ->add('email', EmailType::class, array(
      'label' => 'La tua email', 
      'constraints' => array(
       new Assert\NotBlank(), 
       new Assert\Email() 
      ), 
      'invalid_message' => 'Indirizzo email non valido', 
     )) 
     ->add('phone', TextType::class, array(
      'label' => 'Cellulare', 
      'constraints' => array(
       new Assert\NotBlank(), 
       new Assert\Regex("/[\d\-\ ]+/"), 
       new Assert\Length(array('min' => 5, 'max'=>20)) 
      ) 
     )) 
     ->add('city', ChoiceType::class, array(
      'placeholder' => 'Seleziona una città', 
      'choices' => $cities, 
     )) 
     ->add('age', NumberType::class, array(
      'label' => 'Età', 
      'constraints' => array(
       new Assert\NotBlank(), 
       new Assert\Range(array('min'=>18, 'max'=>100)) 
      ) 
     )) 
     ->add('gender', ChoiceType::class, array(
      'label' => 'Sesso', 
      'choices' => array(
       'Uomo' => 0, 
       'Donna' => 1 
      ), 
      'expanded' => true, 
      'constraints' => array(
       new Assert\NotBlank(), 
       new Assert\Choice(array(0, 1)) 
      ) 
     )) 
     ->add('privacy', ChoiceType::class, array(
      'choices' => array(
       'Dichiaro di aver preso visione della privacy policy e autorizzo il trattamento dei dati personali per le finalità di cui ai punti a) b) c) della stessa.' => 1, 
      ), 
      'expanded' => true, 
      'multiple' => true 
     )) 
     ->add('marketing', ChoiceType::class, array(
      'choices' => array(
       'Presto il consenso per l’utilizzo e la comunicazione dei miei dati a terzi da parte di P&R Eventi e Vacanze s.r.l. per finalità promozionali relative ai servizi turistici e per la ricezione di offerte commerciali.' => 1, 
      ), 
      'expanded' => true, 
      'multiple' => true, 
      'required' => false 
     )) 
     ->add('send', SubmitType::class, array(
      'label' => 'INVIA RICHIESTA', 
      'attr' => array('class' => 'btn btn-corporate btn-lg btn-block'), 
     )) 
     ->getForm(); 

который возвращает экземпляр формы.

На мой контроллер у меня есть:

$form = $requestType->getForm(); 
    $form->handleRequest($request); 

    if($form->isValid()){ 
     $data = $form->getData(); 

     // ..... 

     return $app->redirect('/thank-you'); 
    } 

Проверка отлично работает, он перенаправляет меня, когда форма действительна.

На моем взгляде веточки оказывает форму:

{{ form_start(form) }} 
{{ form_errors(form) }} 
<div class="form-group"> 
    {{ form_label(form.firstName) }} 
    {{ form_widget(form.firstName, {'attr': {'class': 'form-control'}}) }} 
</div> 
<div class="form-group"> 
    {{ form_label(form.lastName) }} 
    {{ form_widget(form.lastName, {'attr': {'class': 'form-control'}}) }} 
</div> 
<div class="form-group"> 
    {{ form_label(form.email) }} 
    {{ form_widget(form.email, {'attr': {'class': 'form-control'}}) }} 
</div> 
... 

Метод form_errors не показывает ничего, если форма не является действительной. Когда-либо БЛАНК ....

Что случилось?

Спасибо заранее!

М.

ответ

0

Я думаю, что форма не содержит Чайлдс ошибок по умолчанию

Добавить вывод ошибок для каждого элемента

<div class="form-group"> 
    {{ form_label(form.firstName) }} 
    {{ form_errors(form.firstName) }} 
    {{ form_widget(form.firstName, {'attr': {'class': 'form-control'}}) }} 
</div> 

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

namespace Form; 

class Edit extends AbstractType 
{ 
    public function buildView(FormView $view, FormInterface $form, array $options) 
    { 
     parent::buildView($view, $form, $options); 

     $view->vars = array_replace($view->vars, array(
      'errors' => $form->getErrors(true) 
     )); 
    } 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     parent::buildForm($builder, $options); 

     $builder 
      ->add('holidayId', HiddenType::class, array()) 
      ->add('firstName', TextType::class, array(
       'label' => 'Il tuo nome' 
      )) 
     ... 
    } 
} 

.... 

$form = $app['form.factory']->create(\Form\Edit::class, [], []); 
Смежные вопросы