iamjc015
iamjc015

Reputation: 2237

form_errors(form) not showing any errors in Symfony Twig

I just dont know why form_errors(form) does not print any errors?

Here is my twig file

<form action="{{ path('fos_user_registration_register') }}" {{ form_enctype(form) }} method="POST" class="fos_user_registration_register signup-form" novalidate>                        
                        <div class="errors">
                             {{ form_errors(form) }}   
                        </div>
                        <div class="form-input-group">
                            <i class="fa fa-check"></i> {{ form_widget(form.firstName, { 'attr': {'class': 'form-control'} } ) }}
                        </div>
                        <div class="form-input-group">
                            <i class="fa fa-check"></i> {{ form_widget(form.lastName, { 'attr': {'class': 'form-control'} } ) }}
                        </div>
                       <div class="form-input-group">
                            <i class="fa fa-check"></i> {{ form_widget(form.contactNumber, { 'attr': {'class': 'form-control'} } ) }}
                        </div>
                        <div class="form-input-group input-append date" id="datepicker">                        
                                <i class="fa fa-calendar"></i>
                                {{ form_widget(form.birthday, 
                                    {attr: { 
                                        'data-format': "dd/MM/yyyy hh:mm:ss" },
                                    }) 
                                }}
                                <span class="add-on"> 
                                    <i data-time-icon="icon-time" data-date-icon="icon-calendar"></i>
                                </span>

                        </div>
                        <div class="form-input-group">
                            <i class="fa fa-venus-mars"></i>
                            <div class="gender radio">                                    
                                <label class="radio-inline">{{ form_widget(form.gender[0]) }} &nbsp; Male </label>        
                                <label class="radio-inline">{{ form_widget(form.gender[1]) }} &nbsp; Female </label>                   
                            </div>
                        </div>
                        <div class="form-input-group">
                            <i class="fa fa-check"></i> {{ form_widget(form.username, { 'attr': {'class': 'form-control', 'placeholder': 'Enter username'} } ) }}
                        </div>
                        <div class="form-input-group">
                            <i class="fa fa-check"></i> {{ form_widget(form.email, { 'attr': {'class': 'form-control', 'placeholder': 'Enter email address'} } ) }}
                        </div>
                        <div class="form-input-group">
                            <i class="fa fa-lock"></i> {{ form_widget(form.plainPassword.first, { 'attr': {'class': 'form-control', 'placeholder': 'Enter password'} } ) }}
                        </div>
                         <div class="form-input-group">
                            <i class="fa fa-lock"></i> {{ form_widget(form.plainPassword.second, { 'attr': {'class': 'form-control', 'placeholder': 'Repeat password'} } ) }}
                        </div>
                        <div class="row">
                             <div class="col-md-6 col-md-offset-3">
                                 <button type="submit" class="btn-fill sign-up-btn">Register</button>
                            </div>
                        </div>   
                        {{ form_rest(form) }} 
                    </form>

and here is my form type:

   class RegistrationType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {

        parent::buildForm($builder, $options);

        $gender = array(
            1 => 'Male',
            0 => 'Female'
        );

        $builder
        ->add('username', 'text' , array('attr'=> array('placeholder'=>'Enter username')))
        ->add('firstName', 'text', array('attr'=> array('placeholder'=>'Enter first name')))
        ->add('lastName', 'text',  array('attr'=> array('placeholder'=>'Enter last name')))
        ->add('birthday', 'datetime', array(
            'attr' => array('placeholder' => 'Pick your birthday'),        
            'widget' => 'single_text', 
            'html5' => false,          
        ))
        ->add('gender', 'choice', array(
            'attr' => array('class' => 'form-control'),        
            'choices' => $gender,
            'data' => 1,
            'expanded' => true,
        ))
        ->add('contactNumber','text' , array('attr'=> array('placeholder'=>'Enter contact number')));
    }

    public function getParent()
    {
        return 'fos_user_registration'; 
    }

    public function getName()
    {
        return 'app_user_registration';
    }

I know that there were errors because if it appears when i render them individually like so:

form_errors(form.firstName);

By the way I am using the 2.7 version.

Upvotes: 0

Views: 2134

Answers (2)

Raphael Marco
Raphael Marco

Reputation: 494

You need to add constraints to each of your form elements.

Example:

use Symfony\Component\Validator\Constraints as Assert;

// ...

$builder->add('username', 'text', array(
    // ...
    'constraints' => array(
        new Assert\Length(array(
            'min' => 4
        )
    ),
    // ...
);

If the username field submitted has length less than 4, then it will show the error.

Check this link for other validation constraints.

Upvotes: 1

Ziumin
Ziumin

Reputation: 4860

Errors of child field will be passed to its parent only if error_bubbling is set to true for this field.

Upvotes: 3

Related Questions