【问题标题】:Sonata Admin validationSonata 管理员验证
【发布时间】:2016-06-30 18:56:56
【问题描述】:

我在 Sonata Admin 中验证时遇到问题。

在客户端的前端我有两种形式:注册和 ProfileEdit。基于 FOSUser。验证规则在:

src/UserBundle/Resources/config/validation.yml

每个表单都有两组验证。对我来说,在后端最好使用此规则并添加一个像 AdminProfileEdit 这样的组,因为前端表单存在差异。但是,我不明白如何配置? 在文档中我读到了 inlineValidation - 在 UserAdmin 类中添加一个方法

/**
 * @param ErrorElement $errorElement
 * @param mixed $object
 */
public function validate(ErrorElement $errorElement, $object)
{
    $errorElement
        ->with('profile.firstname')
            ->assertNotBlank()
        ->end()
        ....
    ;
}

但对我来说,拥有 2 个验证配置是不好的解决方案。在https://sonata-project.org/bundles/admin/2-0/doc/reference/conditional_validation.html 我找不到一个很好的解释如何验证后端表单。

在 Sonata\AdminBundle\Admin\AdminInterface 方法中 validate 被标记为已弃用:

  • @deprecated 此功能不稳定,请使用自定义验证器,
  • Symfony 2.2 将删除该功能

这是什么意思?以及如何验证?有人可以逐步写出该怎么做吗?甚至我需要什么方法或配置?

请帮助某人,我需要快速完成任务,并且没有计划或解决方案。

【问题讨论】:

    标签: forms validation symfony sonata-admin


    【解决方案1】:

    您可以为管理员定义一个验证组并将其指定为form option in the admin class

    protected $formOptions = array(
        'validation_groups' => array('SomeGroup'),
    );
    

    【讨论】:

    • 我试过了。在管理类中: public function getFormBuilder() { $this->formOptions['data_class'] = $this->getClass(); $options = $this->formOptions; $options['validation_groups'] = 'AdminProfile'; $options['cascade_validation'] = true; $formBuilder = $this->getFormContractor()->getFormBuilder($this->getUniqid(), $options); $this->defineFormBuilder($formBuilder);返回 $formBuilder;并将组添加到配置validation.yml。但是表单保存时没有验证错误,即使它们应该是。
    • 我不明白为什么后端validation.yml 不起作用。在前端一切都很好
    猜你喜欢
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多