Я создаю форму в Symfony2. Форма содержит только одно поле book
, которое позволяет пользователю выбирать между объектами Books
. Мне нужно проверить, принадлежит ли выбранный book
к Author
, который у меня есть в моем контроллере.
public class MyFormType extends AbstractType
{
protected $author;
public function __construct(Author $author) {
$this->author = $author;
}
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('book', 'entity', array('class' => 'AcmeDemoBundle:Book', 'field' => 'title');
}
// ...
}
Я хочу проверить после отправки формы, что выбранный book
записывается $author
в моем контроллере:
public class MyController
{
public function doStuffAction() {
$author = ...;
$form = $this->createForm(new MyFormType($author));
$form->bind($this->getRequest());
// ...
}
}
К сожалению, я не могу найти способ сделать это. Я попытался создать специальное ограничение валидатора, как описано в Cookbook, но пока я могу передать параметр EntityManager
as, указав валидатор как услугу, Я не могу передать $author
с контроллера на ограничение валидатора.
class HasValidAuthorConstraintValidator extends ConstraintValidator
{
private $entityManager;
public function __construct(EntityManager $entityManager) {
$this->entityManager = $entityManager;
}
public function validate($value, Constraint $constraint) {
$book = $this->entityManager->getRepository('book')->findOneById($value);
$author = ...; // That the data I'm missing
if(!$book->belongsTo($author))
{
$this->context->addViolation(...);
}
}
}
Это решение может быть именно тем, что я искал, но моя форма не привязана к сущности и не должна быть (я получаю данные из метода getData()
).
Есть ли решение моей проблемы? Это должно быть обычным делом, но я действительно не знаю, как его решить.