Чтобы использовать замыкание, вам нужно определить метаданные проверки с использованием PHP (в отличие от YAML, XML или аннотаций).Для примера взгляните на вкладку «PHP» первого примера на странице, на которую вы ссылаетесь.Он использует loadValidatorMetadata
.
Вот как это будет выглядеть с набором обратного вызова:
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Symfony\Component\Validator\Constraints\Choice;
class Author
{
protected $gender;
public static function loadValidatorMetadata(ClassMetadata $metadata)
{
$metadata->addPropertyConstraint('gender', new Choice(
'message' => 'Choose a valid gender',
'callback' => function () {
return array('male', 'female');
},
));
}
}
Как видите, он не очень хорошо работает.Основная проблема в том, что статический метод loadValidatorMetadata
на самом деле не имеет никакого доступа к внешнему миру.
Если вы настаиваете на использовании замыканий, вы можете создать отдельную реализацию Symfony\Component\Validator\Mapping\Loader\LoaderInterface
.Но, честно говоря, проще всего просто использовать обратный вызов с именем метода экземпляра, как показано в примере с getGenders
.