cap*_*ica 10 validation symfony fosuserbundle sonata-admin sonata-user-bundle
我根据文档安装了SonataUserBundle,一切正常.除了我不能添加自定义验证规则.
我的理解是新规则应该添加到新的验证组,然后更新config.yml以告诉SonataUserBundle(或FosUserBundle)将新规则添加到验证序列.
我已经以各种方式尝试了这一点,但新规则似乎根本没有被接受......
这是我正在使用的配置......
(为了这个例子,我只是尝试将NotNull约束添加到一个新的foo字段.实际上我希望看到这么多工作,然后添加更多的验证规则.)
我已经添加了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" />
...
Run Code Online (Sandbox Code Playgroud)
在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;
}
// ...
Run Code Online (Sandbox Code Playgroud)
然后我将新的验证规则添加到我项目的现有validation.yml文件中:
Application\Sonata\UserBundle\Entity\User:
properties:
foo:
- NotNull: { groups: [CustomGroup] }
Run Code Online (Sandbox Code Playgroud)
(请注意,我还尝试在Application\Sonata\UserBundle\Resources\config中创建validation.yml和validation.xml文件,但这似乎没有任何区别.)
在config.yml中,我告诉SonataUserBundle使用我的新CustomGroup进行验证:
sonata_user:
# ...
profile:
form:
validation_groups: [CustomGroup, Profile, Default]
Run Code Online (Sandbox Code Playgroud)
(请注意,我还尝试在fos_user级别添加验证组(fos_user.profile.form.validation_groups: [CustomGroup, Profile, Default])并添加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()
;
}
Run Code Online (Sandbox Code Playgroud)
那么......我错过了什么?UserAdmin表单与"配置文件"表单不同吗?(虽然我也尝试更新注册表单设置)或者我在其他地方设置验证规则?
希望我错过了一些小事!
提前致谢,
C
该UserAdmin形式是不一样的曲线形式.
要找出表单正在使用哪个验证组打开symfony的分析器
要向SonataUserBundle的UserAdmin创建或编辑用户添加自定义验证规则,您需要执行以下操作:
如果你看一下https://github.com/sonata-project/SonataUserBundle/blob/master/Admin/Model/UserAdmin.php 你会看到用户admin的validation_groups被硬编码为Registration(new)或Profile(编辑).
你有2个选择.
A)只需将验证规则添加到项目validation.yml并使用现有的注册验证组.
Application\Sonata\UserBundle\Entity\User:
properties:
foo:
- NotNull: { groups: [Registration, Profile] }
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3963 次 |
| 最近记录: |