2017-01-19 8 views
1

私はProductエンティティ用のフォームを持っており、その内部にタグを入れています。Symfonyのデータトランスフォーマーによる検証

私はdocumentationに従い、データトランスフォーマーを使用しました。ユーザーはスペースで区切られた文字列を入力し、これをタグコレクションに展開します。

メタ文字を使用できないように、コレクションに変換された文字列を検証する必要があります。

私はこれを試してみましたが、それは動作しません。(参照symfony2 entity validation regexp a-z A-Z 0-9

//AppBundle\Entity\Product.php 
/** 
* @ORM\ManyToMany(targetEntity="Tag", cascade={"persist", "remove"}) 
* @Assert\Regex(
*  pattern="/[\w\s]+/", 
*  match=true, 
*  message="Your property should match my damn regex !" 
*) 
* @ORM\JoinTable(
*  name="contenus_tags", 
*  joinColumns={@ORM\JoinColumn(name="contenu_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="id")} 
*) 
*/ 
private $tags; 

がどのように私はこれを行うことができますか?

+1

をその上のタグのクラスでの検証を追加します。名前、およびあなたの製品クラスのタグに対する「有効な」アサーションを作成しますか? – Veve

+1

ああ、データ変換後でもうまくいくとは思っていませんでしたo_O Symfonyはあまりにも賢いです!ありがとうございました ! 回答を追加して受け入れることができます。 –

答えて

1

製品のクラスでその名前をタグクラスでの検証を追加し、タグの「有効」アサーション:

//AppBundle\Entity\Tag.php 
/** 
* @Assert\Regex(
*  pattern="/^[a-Z0-9]+$/", 
*  match=true, 
*  message="Your property should match my damn regex !" 
*) 
*/ 
private $name; 

//AppBundle\Entity\Product.php 
/** 
* @ORM\ManyToMany(targetEntity="Tag", cascade={"persist", "remove"}) 
* @Assert\Valid() 
* @Assert\Regex(
*  pattern="/[\w\s]+/", 
*  match=true, 
*  message="Your property should match my damn regex !" 
*) 
* @ORM\JoinTable(
*  name="contenus_tags", 
*  joinColumns={@ORM\JoinColumn(name="contenu_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="id")} 
*) 
*/ 
private $tags; 
関連する問題