我正在 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());
// ...
}
}
不幸的是,我找不到任何方法来做到这一点。我尝试按照The 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's the data I'm missing
if(!$book->belongsTo($author))
{
$this->context->addViolation(...);
}
}
}
该解决方案可能正是我正在寻找的解决方案,但我的表单未绑定到实体,也不应该是(我从getData()
方法中获取数据)。
我的问题有解决方案吗?这一定是一个常见的情况,但我真的不知道如何解决它。