4
Symfony2でエンティティ全体の複雑なカスタム検証を行う必要があります。Symfony2エンティティ全体に対する検証
例:私のentity
は多くのsubentities
があり、すべてのsubentities
は、私の知る限り尋できるよう100
に合計しなければならない、Symfony2のが唯一の特異フィールドを検証バリ?
Symfony2でエンティティ全体の複雑なカスタム検証を行う必要があります。Symfony2エンティティ全体に対する検証
例:私のentity
は多くのsubentities
があり、すべてのsubentities
は、私の知る限り尋できるよう100
に合計しなければならない、Symfony2のが唯一の特異フィールドを検証バリ?
答えははいです。パラメータではなくオブジェクトに対して制約を指定し、クラスレベルの制約である制約を指定する必要があります。幾分冗長例は、このです:
config.yml
validator.my.uniquename:
class: FQCN\To\My\ConstraintValidator
arguments: [@service_container]
tags:
- { name: validator.constraint_validator, alias: ConstraintValidator }
validation.yml
FQCN\To\My\Entity:
constraints:
- FQCN\To\MyConstraint: ~
(この例では、制約のない引数)
マイ制約
namespace FQCN\To;
use
Symfony\Component\Validator\Constraint
;
/**
* @Annotation
*/
class MyConstraint extends Constraint
{
public $message = 'Constraint not valid';
public function validatedBy()
{
return 'ConstraintValidator';
}
public function getTargets()
{
# This is the important bit.
return self::CLASS_CONSTRAINT;
}
}
My ConstraintValidator
class MyConstraintValidator extends ConstraintValidator
{
protected $container;
function __construct($container)
{
$this -> container = $container;
}
function isValid($object, Constraint $constraint)
{
# validation here.
return true;
}
}
制約条件MyBundle \ Validator \ Constraintを解決するためのヒントは、プロパティやゲッタにはできません。 – greg
@gregと将来の訪問者のためには、ABOVEという制約注釈をクラス宣言に入れなければなりません。 – keyboardSmasher
答えを書くときの精度を上げてください。 –