我正在尝试使用表单类来添加&编辑。在添加模式下,需要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验证触发器
答案 0 :(得分:4)
在ItemForm
构造函数中,您将$mode
设置为$this->mode
,但您正在尝试从$mode
访问getDefaultOptions()
。 $mode
显然不存在于此范围内 - 请尝试更改为以下内容:
public function getDefaultOptions(array $opts) {
if ($this->mode == 'add') {
return array('validation_groups' => array('Default', 'add'));
} else {
return array('validation_groups' => array('Default'));
}
}
答案 1 :(得分: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');
}
},
));
}