我正在使用带有fos用户捆绑的sonata 2.8,我扩展了用户实体和管理员,除了用户组的验证之外,它还能满足各种需求。
如果用户几乎没有选择任何一组,我会发出阻止发送数据的内联错误吗?
我已经尝试了
->add('groups', 'sonata_type_model', array(
'expanded' => true,
'multiple' => true,
'required' => true
))
但是无法正常工作
问题出现在每个字段中,关系多对一或多对多,例如我有一个2实体paese,zone,
// paeseAdmin.php
$formMapper
->with('Zone')
->add('name', 'text' , array('label'=>"Paese"))
->add('zone','sonata_type_collection',array('by_reference' => false, 'required' => true,), array( 'edit' => 'inline','inline' => 'table', 'class' => 'test',))
->end()
;
// paese entity
/**
* @var Zona
* @ORM\OneToMany(targetEntity="Zona", mappedBy="paesi" , orphanRemoval=true, cascade={"persist"})
* @ORM\OrderBy({"nome" = "ASC"})
*/
private $zone;
// zona entity
/**
* @var Paese
* @ORM\ManyToOne(targetEntity="Paese", inversedBy="zone" )
* @ORM\OrderBy({"nome" = "ASC"})
* @ORM\JoinColumn(name="paese_id", referencedColumnName="id")
*/
private $paesi;
任何想法?谢谢
答案 0 :(得分:1)
如果您使用的是Sonata Admin捆绑包,则可以使用validate
继承的函数来进行高级验证(例如馆藏计数)
例如:
use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\CoreBundle\Validator\ErrorElement;
class UserAdmin extends AbstractAdmin
{
/// ...
public function validate(ErrorElement $errorElement, $object)
{
if (!$object->getGroups()->count()) {
$errorElement
->with('groups')
->addViolation('You should select at least one group')
->end();
}
parent::validate($errorElement, $object);
}
}
答案 1 :(得分:0)
您需要'required' => false
,然后'required' => true
需要删除多余的
关于奏鸣曲类型集合的奏鸣曲文档
将'required'选项设置为true不会导致需要'至少一个'子实体。将'required'选项设置为false会导致所有嵌套表单字段也不再需要。
将required => true
添加到sonata_type_collection
字段时,您只允许在子表单中包含必填字段。
答案 2 :(得分:0)
因此您必须在实体用户
中添加这些行use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
/**
* @Assert\Callback(methods={"isGroupValid"})
*/
public function isGroupValid(ExecutionContextInterface $context)
{
if ($this->groups->count()==0) {
$context
->buildViolation('choisir au minimum un group!', array(), null)
->atPath('groups')
->addViolation()`enter code here`;
}
}
答案 3 :(得分:0)
在我的奏鸣曲版本中,对我没有任何作用。
sonata-project / admin-bundle 3.51.0
friendsofsymfony /用户捆绑包v2.1.2
无论如何都不会调用validate方法。
所以我最终写了一个验证:
#File: src/Application/Sonata/UserBundle/Resources/config/validation.xml
<property name="groups">
<constraint name="Count">
<option name="min">1</option>
<option name="minMessage">Please choose one group.</option>
</constraint>
</property>