Symfony 2 表单验证分组

3

我试图使用一个表单类来进行添加和编辑。在添加模式下,iconFile 是必需的。在编辑模式下,iconFile 是可选的(以替换当前的图标)。我该如何实现这一点?

我尝试在构造函数中设置一个模式。

class ItemForm extends AbstractType {
    public function __construct($mode) {
        $this->mode = $mode;
    }

    public function getDefaultOptions(array $opts) {
        if ($mode == 'add') {
            return array('validation_groups' => array('Default', 'add'));
        } else {
            return array('validation_groups' => array('Default'));
        }
    }
}

// doctrine entity, data_class of form
class Item {
    /**
     * @Assert\NotBlank(groups={"add"})
     * @Assert\Image
     */
    protected $iconFile;
}

// creating the form in controller
$form = $this->createForm(new ItemForm($mode));

问题在于即使在编辑模式下,我仍然需要选择一张图片。这会触发HTML5验证。

2个回答

4
在您的ItemForm构造函数中,您将$mode设置为$this->mode,但是您随后尝试从getDefaultOptions()访问$mode。显然,$mode在该范围内不存在-请尝试更改如下:
public function getDefaultOptions(array $opts) {
    if ($this->mode == 'add') {
        return array('validation_groups' => array('Default', 'add'));
    } else {
        return array('validation_groups' => array('Default'));
    }
}

0

你可以做:

public function setDefaultOptions(OptionsResolver\OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'LIG\Bundle\UserBundle\Entity\User',
        'validation_groups' => function(Form\FormInterface $form) {
            $data= $form->getData();
            if($data->getId())
            {
                return array('Default', 'Edit');
            }
            else
            {
                return array('Default', 'Add');
            }
        },
    ));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接