gpt4 book ai didi

validation - 将自定义验证规则添加到 Sonata User Bundle

转载 作者:行者123 更新时间:2023-12-02 08:29:44 27 4
gpt4 key购买 nike

我已经根据文档安装了 SonataUserBundle,一切正常。除了我无法添加自定义验证规则。

我的理解是,新规则应该添加到新的验证组中,然后更新 config.yml 以告诉 SonataUserBundle(或 FosUserBundle)将新规则添加到验证序列中。

我已经以各种方式尝试过这一点,但新规则似乎根本没有被接受......

这是我正在使用的配置...

(就本示例而言,我只是尝试向新的 foo 字段添加 NotNull 约束。实际上,我希望看到这么多工作,然后添加更多验证规则。)

我已将 foo 字段添加到 Application\Sonata\UserBundle\Resources\config\doctrine\User.orm.xml 并且一切正常,将 foo 字段添加到 User .php 类。

# in Application\Sonata\UserBundle\Resources\config\doctrine\User.orm.xml
...
<field name="foo" type="string" length="100" nullable="true" />
...

在 User.php 中,我们有属性及其 getter 和 setter:

// In Application\Sonata\UserBundle\Entity\User.php
// ...
/**
* @var string
*/
private $foo;

/**
* Set foo
*
* @param string $foo
* @return User
*/
public function setFoo($foo)
{
$this->foo = $foo;

return $this;
}

/**
* Get foo
*
* @return string
*/
public function getFoo()
{
return $this->foo;
}
// ...

然后,我将新的验证规则添加到项目的现有validation.yml 文件中:

Application\Sonata\UserBundle\Entity\User:
properties:
foo:
- NotNull: { groups: [CustomGroup] }

(请注意,我还尝试在 Application\Sonata\UserBundle\Resources\config 中创建validation.yml和validation.xml文件,但这似乎没有任何区别。)

在 config.yml 中,我告诉 SonataUserBundle 使用我的新 CustomGroup 进行验证:

sonata_user:
# ...
profile:
form:
validation_groups: [CustomGroup, Profile, Default]

(请注意,我还尝试在 fos_user 级别添加验证组(fos_user.profile.form.validation_groups: [CustomGroup, Profile, Default])并添加 sonata_user。 profile.register.form.validation_groups:[自定义组,注册,默认],但无济于事。)

并且,为了完整起见,以下是添加到 UserAdmin.php 的字段:

// In Application\Sonata\UserBundle\Admin\UserAdmin.php
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->with('General')
// ...
->add('foo', null, array('required' => false))
->end()
;
}

那么...我错过了什么? UserAdmin 表单与“个人资料”表单不一样吗? (虽然我也尝试过更新注册表单设置)或者我是否在其他地方设置验证规则?

希望我只是错过了一些小事!

提前致谢,

C

最佳答案

用户管理表单与个人资料表单相同。

<小时/>

要找出表单使用的验证组,请打开 symfony 的分析器

  1. 在开发环境 (app_dev.php) 中发布您的表单
  2. 打开http://127.0.0.1:8000/app_dev.php/_profiler/
  3. 查看最近 10 条提交的内容。
  4. 点击提交表单的 POST 方法(在本例中为 sonata 用户管理员创建表单)
  5. 点击表格
  6. 在“Passed Options”或“Resolved Options”中,您应该会看到设置了哪些validation_groups。
<小时/>

要将自定义验证规则添加到 SonataUserBundle 的 UserAdmin 创建或编辑用户,您需要执行以下操作:

如果你看https://github.com/sonata-project/SonataUserBundle/blob/master/Admin/Model/UserAdmin.php您将看到用户管理员的validation_groups被硬编码为注册(新)或个人资料(编辑)。

您有 2 个选择。

A) 只需将您的验证规则添加到您的项目validation.yml 并使用现有的注册验证组即可。

Application\Sonata\UserBundle\Entity\User:
properties:
foo:
- NotNull: { groups: [Registration, Profile] }

B) 重写 UserAdmin::getFormBulder() 以添加自定义验证组

// In Application\Sonata\UserBundle\Admin\UserAdmin.php
public function getFormBuilder()
{
$this->formOptions['data_class'] = $this->getClass();

$options = $this->formOptions;
$options['validation_groups'] = (!$this->getSubject() || is_null($this->getSubject()->getId())) ? ['CustomGroup','Registration'] : 'Profile';

$formBuilder = $this->getFormContractor()->getFormBuilder( $this->getUniqid(), $options);

$this->defineFormBuilder($formBuilder);

return $formBuilder;
}

关于validation - 将自定义验证规则添加到 Sonata User Bundle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25609526/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com