使用Assert语句进行Symfony2表单验证

时间:2015-07-16 11:40:13

标签: symfony

我无法在实体属性中使用Assert语句在Symfony2中验证我的表单。

这是我的实体:

use Symfony\Component\Validator\Constraints as Assert;

    class AqquiringRequestData
    {
        /**
         * @Assert\IsTrue(message="Необходимо принять условия")
         * @Assert\NotNull(message="Необходимо принять условия")
         */
        public $checkacc;

这是我的表单构建器:

public function buildForm(FormBuilderInterface $builder, array $options) {
        $builder->add('checkacc', 'checkbox', array(
                'label' => 'I agree',
                'required'  => false,               
                'validation_groups' => array('Default'),
        ));
    }

这是控制器动作:

            $formData = new AqquiringRequestData();

            $flow = $this->get('cib.form.flow.aqquiringreq');
            $flow->bind($formData);
            $form = $flow->createForm();

            if ($flow->isValid($form)) {
                   ...

当我尝试使用未选中的复选框提交表单时,它已成功提交。我做错了什么?

谢谢!

2 个答案:

答案 0 :(得分:2)

选项1:启用验证注释

Validation > Configuration

默认情况下,未启用用于验证的注释阅读器。您可以在上面的链接中阅读如何更改它。

选项2:使用yaml作为验证规则

您的捆绑包使用yml配置格式,因此我建议您以yml格式记下验证规则。

这看起来像这样:

# src/AppBundle/Resources/config/validation.yml
AppBundle\Entity\AqquiringRequestData:
    properties:
        checkacc:
            - NotNull: ~

阅读本文:http://symfony.com/doc/current/book/validation.html注意:示例有不同配置格式的多个标签

答案 1 :(得分:0)

你不应该处理请求 $ form-> handleRequest($ request)或$ form-> bind($ formData)。

$formData = new AqquiringRequestData();

$flow = $this->get('cib.form.flow.aqquiringreq');
$form = $flow->createForm();
$form->handleRequest($formData); // Your form needs to be associated with an entity some how

if ($form->isValid($form)) { // You are validating the form, right?