我已经根据文档安装了 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]
)添加验证组并添加 in sonata_user.profile.register.form.validation_groups: [CustomGroup, Registration, Default]
,但无济于事。)
而且,为了完整起见,这里是添加到 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