2017-06-21 100 views
0

我想用一個簡單的表單定義來過濾一些數據,所以我創建了沒有附加類的表單(期望使用getData()函數),然後使用數組傳遞給表單的參數,但表單始終無效。導致表單試圖驗證不屬於表單上下文的參數。使用簡單的symfony形式的奇怪的行爲約束

我在字段「almacen」中收到此驗證錯誤: 此值不應爲空。

隨着原因:

的Symfony \元器件\驗證\ ConstraintViolation 對象(Symfony的\元器件\表格\表)。數據[ALMACEN] .responsable = NULL

我嘗試使用cascade_validation=false但沒有工作。

在控制器動作我聲明:

public function indexAction(Request $request) 
{ 
    $informeStock = $this->createForm(new BusquedaInformeStockType()); 

    $informeStock->handleRequest($request); 
    if ($informeStock->isSubmitted() && $informeStock->isValid()) { 
     $data = $informStock->getData(); 
     // the action logic... 
    } 

    ... 
} 

我有一個簡單的形式定義,聲明的實體形式和類型沒有data_class asociated到窗體。

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('almacen', 'entity', array(
      'class' => 'BusetaBodegaBundle:Bodega', 
      'placeholder' => '---Seleccione---', 
      'required' => false, 
      'label' => 'Bodega', 
      'attr' => array(
       'class' => 'form-control', 
      ), 
     )) 
     ... 
     ... 
} 

public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'csrf_protection' => false, 
    )); 
} 

這是實體酒窖的定義:

class Bodega 
{ 
    ... 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="codigo", type="string", nullable=true) 
    * @Assert\NotBlank() 
    */ 
    private $codigo; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="nombre", type="string") 
    * @Assert\NotBlank() 
    */ 
    private $nombre; 

    /** 
    * @ORM\ManyToOne(targetEntity="Buseta\BodegaBundle\Entity\Tercero", inversedBy="bodega") 
    * @Assert\NotBlank() 
    */ 
    private $responsable; 

    ... 
} 

在實體酒窖的早期版本中的參數「RESPONSABLE」留空白,所以在DB全髖關節置換某些行沒有「應答」分佈。 但儘管如此,這不應該發生的權利?我做錯了什麼?

回答

0

你有一個entity form field與驗證約束:

/** 
* @ORM\ManyToOne(targetEntity="Buseta\BodegaBundle\Entity\Tercero", inversedBy="bodega") 
* @Assert\NotBlank() 
*/ 
private $responsable; 

這是你的問題 - 斷言not blank

用於驗證值不爲空,定義爲不嚴格假, 不等於一個空白字符串也不等於空

你有幾個選擇,ei請添加驗證組(read thisthis)或簡單地刪除該Assert。對於像這樣的關聯,最好使用@Assert\Valid

+0

該字段'$ resposable'是Bodega實體的一部分,但我沒有定義這個實體,我只使用Bodega來填充過濾器表單上的「select」。 – Dundivet