【问题标题】:Symfony 2 Form Validation GroupsSymfony 2 表单验证组
【发布时间】:2011-12-22 07:14:24
【问题描述】:

我正在尝试使用表单类进行添加和编辑。在添加模式下,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 验证触发器

【问题讨论】:

    标签: forms validation symfony


    【解决方案1】:

    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'));
        }
    }
    

    【讨论】:

      【解决方案2】:

      你可以这样做:

      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');
                  }
              },
          ));
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-30
        • 1970-01-01
        相关资源
        最近更新 更多