2016-06-30 20 views
0

私のフォームは、制約が設定されたモデルに関連付けられています。
は、評価されることのないように見える表現制約で飾られたフィールドが1つだけの場合を除いて、妥当性検査は正常にパスします。symfony 3検証式が評価されない

私の必要性がある:私のモデルの「helpType」プロパティの値は、いくつかの配列に含まれるていない場合は、検証を通過しないので、私は仕事に以下のコードを期待:

// PostModel.php

/** 
* @Assert\Expression(
*  "this.isValidHelpType()", 
*  message="post.create.help-invalid" 
*) 
* @ORM\Column(type="integer") 
*/ 
protected $helpType; 
public function isValidHelpType() 
{ 
    return in_array($this->getHelpType(), Post::getHelpTypes()); 
} 

// PostType.php

// … 
->add('helpType', TextType::class, [ 'error_bubbling' => true, 'label'=>false ]) 
// … 

"false"を式のかわりに入力するか、またはをのisValidHelpType()関数の中から(return文の前に、明らかに)何も起こらないので、制約は決して実行されないようです。

classレベル対XOR動作のレベルpropertyのような種類の異なる種類の制約がありますか?とにかく、ここで何が起こっているのか?
ありがとうございます。

答えて

0

実際には、検証グループを使用しています。実行コンテキストに関連して、その制約にgroup={"some_group"}プロパティを設定するのを忘れてしまいました。最後に

は、ここで私は(整数)値は、いくつかの配列に含まれていることを確認するために、終わったものです:

<?php 
// ... 
/** 
* @Assert\Expression(
*  "this.isHelpTypeValid()", 
*  message="create.help-invalid", 
*  groups={"creation"} 
*) 
* @ ORM\Column(type="integer") 
*/ 
protected $helpType; 
public function isHelpTypeValid() 
{ 
    // value from POST are strings, now make sure it looks like numeric 
    return is_numeric($this->getHelpType()) 
     // Cast to integer and set value 
     && $this->setHelpType((int)$this->getHelpType()) 
     // now test if reference array contains that value 
     && in_array($this->getHelpType(), Post::getHelpTypes(), true); 
} 
関連する問題