0

フィールド スラッグを持つエンティティにクラス制約があります。カスタム クラス制約でスラッグのチェックを行いたいのですが、制約では値getSlug()が空です。

// my custom class validator
public function isValid( $page, Constraint $constraint ) {
    $slug = $page->getSlug();

=>$slug空です。

これが私のエンティティです

class page
{
    /**
     * @ORM\Column(name="name", type="string", length=150)
     * @Assert\NotBlank()
     */
    private $name;

    /**
     * @Gedmo\Slug(fields={"name"})
     * @ORM\Column(name="slug", type="string", length=255)
     */
    private $slug;

これが私のコントローラーです:

public function createAction()
{
    $entity  = new Page();
    $request = $this->getRequest();
    $form    = $this->createForm( new PageType(), $entity );
    $form->bindRequest( $request );

カスタム クラス バリデータは で呼び出され$form->bindRequest( $request )ます。ドクトリンは pre persist イベントでスラッグを設定するので、スラッグは設定されていないと思います。しかし、このイベントは後で で呼び出され$em->persist( $entity )ます。

クラスの制約でページのスラッグに到達する方法はありますか?

4

1 に答える 1

0

いいえ、できません。

あなたが言ったように、スラッグはprePersistイベントで生成されます。

スラグを検証する必要がありますか? その場合は、@Gedmo\Slug注釈を削除して自分で作成します...しかし、それが本当に良い考えかどうかはわかりません。

于 2012-07-02T07:06:50.720 に答える