14

新しいエンティティを作成するフォームがあります。そのエンティティには、そのフォームにも入力されている他のエンティティのコレクションがあります。

コレクション内のエンティティの検証オプションを使用してそれらのエンティティを検証したいのですが、うまくいきません。「メイン」エンティティ (Person) の検証ルールはチェックされますが、addressListコレクション内のエンティティ (Address) の検証ルールはチェックされません。フィールドに無効な情報を入力すると、送信されたフォームが正常に検証されます。

この例では、street のアノテーションは検証で使用されません。

class Person 
{
    ...

    /**
     * @ORM\OneToMany(targetEntity="Address", mappedBy="owner", cascade={"persist", "detach"})
     */
    protected $addressList;

    ....
}

class Address
{
    ...
    /**
     * @ORM\ManyToOne(targetEntity="Person", inversedBy="addressList")
     * @ORM\JoinColumn(name="person_id", referencedColumnName="id", onDelete="CASCADE")
     */
    protected $owner;

    /**
     * @ORM\Column(type="string", length=75)
     * @Assert\MinLength(
     *     limit=3,
     *     message="Street must have atleast {{ limit }} characters."
     * )
     */
    protected $street;

    ...

}

提供された Address エンティティを検証するフォームを取得するにはどうすればよいですか?

4

4 に答える 4

15

私は同じ問題を抱えていましたが、次の方法で解決しました:

/**
 * @ORM\OneToMany(
 *  targetEntity="Entity",
 *  mappedBy="mappedEntity",
 *  cascade={"persist" , "remove"}
 * )
 * @Assert\Valid
 */
于 2013-04-09T07:58:17.077 に答える
6

次のように注釈 assert を追加するだけです

/** 
 * @Assert\Count(
 *      min = "1",
 *      minMessage = "You must specify at least one"
 * )
 * @Assert\Valid 
 * 
 */
protected $name_of_collection_property;
于 2015-02-09T05:33:14.830 に答える
0

「有効」制約を「すべて」制約とともに使用することもできます。

/**
 * @ORM\OneToMany(targetEntity="Address", mappedBy="owner", cascade={"persist", "detach"})
 * @Assert\All({
 *     @Assert\Valid
 * })
 */

protected $addressList;
于 2012-08-04T10:58:41.340 に答える