3

Assert/Callback検証に問題があります。これをコードのサンプルとして使用しましたが、Symfony は検証関数を無視します。これは私のエンティティコードの関連部分です

namespace Vendor\Bundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo; // gedmo annotations
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\ExecutionContext;


/**
 * @Assert\Callback(methods={"isValidFirma"})
 * @ORM\Entity(repositoryClass="Vendor\Bundle\Entity\UserProfileRepository")
 * @ORM\Table(name="user_profile")
 */
class UserProfile
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    //...

    public function isValidFirma(ExecutionContext $context){
        $context->addViolationAtSubPath('Firma', 'Company name must be present', array(), null);
        // as of sf 2.3 use addViolationAt() instead [reference: https://github.com/propelorm/PropelBundle/issues/234 ]
    }    

    //...            

}

isValidFirma呼び出されることはありません。アノテーションの代わりに validation.yml ファイルも試しましたが、成功しませんでした。変更のたびに約 50 回キャッシュをクリアしましたが、どちらも役に立ちませんでした。何が問題なのですか?

4

1 に答える 1

4

ソリューション。問題は、使用されているバリデータ グループにありました。アサートバリデーターはそのグループの一部である必要があります。そうでない場合はトリガーされません。フォーム クラス ファイル内の次のコードが原因でした。

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $vg = array('my-profile');


    $resolver->setDefaults(array(
        'validation_groups' => $vg
    ));
}

assert で行を変更する

* @Assert\Callback(methods={"isValidFirma"}, groups={"my-profile"})

トリックをしました。

于 2012-11-08T13:52:12.230 に答える