Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <h3>Edit :</h3> <p>I've just made a more complete answer on topic <a href="https://stackoverflow.com/questions/12911686/symfony-validate-form-with-mapped-false-form-fields/13086678#13086678">Symfony validate form with mapped false form fields</a></p> <h3>Original answer</h3> <p>Validating unbound (non mapped) field in a form is not well documented and the fast evolving form and validator components make the few examples obsoletes (for Symfony 2.1.2).</p> <p>For now I succeed in validated non mapped fields with event listener. Here is my simplified code :</p> <pre><code>namespace Dj\TestBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolverInterface; use Symfony\Component\Form\FormEvents; use Dj\TestBundle\Form\EventListener\NewPostListener; class PostType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder-&gt;add('lineNumber', 'choice', array( 'label' =&gt; 'How many lines :', 'choices' =&gt; array( 3 =&gt; '3 lines', 6 =&gt; '6 lines' ), // 'data' =&gt; 3, // default value 'expanded' =&gt; true, 'mapped' =&gt; false )) -&gt;add('body', 'textarea', array( 'label' =&gt; 'Your text', 'max_length' =&gt; 120)); // this listener will validate form datas $listener = new NewPostListener; $builder-&gt;addEventListener(FormEvents::POST_BIND, array($listener, 'postBind')); } // ... other methods } </code></pre> <p>And the event listener :</p> <pre><code>namespace Dj\TestBundle\Form\EventListener; use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\FormError; /** * listener used at Post creation time to validate non mapped fields */ class NewPostListener { /** * Validates lineNumber and body length * @param \Symfony\Component\Form\FormEvent $event */ public function postBind(FormEvent $event) { $form = $event-&gt;getForm(); $data = $event-&gt;getData(); if (!isset($data-&gt;lineNumber)) { $msg = 'Please give a correct line number'; $form-&gt;get('lineNumber')-&gt;addError(new FormError($msg)); } // ... other validations } } </code></pre> <p>This is how I validate my non mapped fields until I find out how to do this with validators.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload