将自定义参数传递给 Symfony2 中的自定义 ValidationConstraint
2022-08-30 19:09:23
我正在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());
// ...
}
}
不幸的是,我找不到任何方法来做到这一点。我尝试创建自定义验证程序约束,如说明书中所述,但是虽然我可以通过将验证程序定义为服务来传递 as 参数,但我无法将 从控制器传递到验证程序约束。EntityManager
$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()
我的问题有解决方案吗?这一定是一个常见的情况,但我真的不知道如何解决它。