2016-03-18 79 views
1

我使用assert來檢查我的表單的值。我無法使用集合上的斷言。檢查每個值是否爲空並且是數字的主要目標。Symfony2:表單驗證與集合

我試圖用this link解決我的問題沒有成功。

這裏是我的實體的一部分:

namespace MyBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 
use Symfony\Component\Validator\Constraints as Assert; 

class Myclass 
{ 

    private $id;  
    /** 
    * @Assert\NotBlank() 
    * @Assert\Regex(pattern="/^0[1-9]([-. ]?[0-9]{2}){4}$/",message="Invalid") 
    */ 
    private $numbers; 

    ... 



    public function __construct() 
    { 
     $this->numbers= new ArrayCollection(); 
    } 

    ... 

    public function addNumber($number) 
    { 
     $this->numbers[] = $number; 
     return $this; 
    } 

    public function removeNumber($number) 
    { 
     $this->numbers->removeElement($number); 
    } 

    public function getNumbers() 
    { 
     return $this->numbers; 
    } 
} 

這裏是我的表單的一部分:

namespace MyBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolver; 

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

     $builder 
     ->add('numbers',"Symfony\Component\Form\Extension\Core\Type\CollectionType",array(
      'required'=>true, 
      'prototype' => true, 
      'allow_add' => true,    
      'allow_delete' => true, 
      'entry_type'=>"Symfony\Component\Form\Extension\Core\Type\TextType", 
      'entry_options' => array(
       'required' => true, 
       'attr'  => array('class' => 'form-control'), 
       ) 
      ) 
     ); 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'MyBundle\Entity\Myclass' 
     )); 
    } 

    public function getBlockPrefix() 
    { 
     return 'mybundle_myclass'; 
    } 
} 

回答

1

「全部」 斷言似乎是工作All (The Symfony Reference)

這裏是解決方案:

/** 
* @Assert\All({ 
*  @Assert\NotBlank(), 
*  @Assert\Regex(pattern="/^0[1-9]([-. ]?[0-9]{2}){4}$/",message="Invalid") 
* }) 
*/ 
private $numbers;