4

私はアピールエンティティを持っています。SiteTariff、ユーザー エンティティ。関税、サイト エンティティ 検証をエンティティに移動する方法。複雑な検証: 関連するエンティティを使用。私は(エンティティで)コールバックを書き込もうとしていました=>結果なし。

    $appeal = new Appeal();
    $form = $this->createFormBuilder($appeal);

    if ($request->isMethod('POST'))
    {
        $form->bind($request);

        $appeal->setUser($user); //addRelation

        $appeal->appeals_count = $value; //set value to public field

        if ($site_tariff_id = $form->getData()->site_tariff_id)
        {
            $siteTariff = $em->find('', $site_tariff_id);
            $appeal->setSiteTariff($siteTariff); //addRelation
        }
        else
        {
            //addError, break
        }                      


        if ($appeal->getSiteTariff()->getSite()->getUser()->getId() != $user->getId())
        {
            //addError
        }

        if ($appeal->getSiteTariff()->getTariff()->getAppealsNumber() <= $appeal->appeals_count)
        {
            //addError
        }

        if ($form->isValid())
        {
            $em->persist($appeal);
        }
    }

コールバック時に $siteTariff を呼び出した後、オブジェクトを取得できませんでした。symfony$this->getSiteTariff()は「非オブジェクト」と書き込みます。

    public function isSiteTariffValid(ExecutionContext $context)
    {
        var_dump($this->getSiteTariff()->getId());    
    }
4

1 に答える 1

0

検証コードは、コントローラー内ではなく、エンティティ内にある必要があります。ドキュメントを参照してください:http ://symfony.com/doc/current/reference/constraints/Callback.html

于 2013-01-23T16:32:27.147 に答える