gre*_*emo 7 symfony-forms symfony doctrine-orm
我的表单作为字段users(实体类型).如何添加验证以便至少应选择一个用户?实际上我正在添加一个事件监听器,但我不知道这是否是一个合法的解决方案:
public function buildForm(\Symfony\Component\Form\FormBuilder $builder,
array $options)
{
$builder
->add('title', 'text', array(
'label' => 'Titolo'
))
->add('content', 'textarea', array(
'label' => 'Contenuto'
))
->add('sender_text', 'text', array(
'label' => 'Mittente testuale',
))
->add('users', 'entity', array(
'label' => 'Destinatari',
'class' => 'DL\FidelityBundle\Entity\User',
'property' => 'select_label',
'multiple' => true
));
;
// Valida il numero di utenti selezionati
$builder->addEventListener(\Symfony\Component\Form\FormEvents::POST_BIND,
function($event) {
$form = $event->getForm();
$data = $event->getData();
if(!$data->users->isEmpty()) return;
$msg = 'Occorre specificare almeno un utente destinatario';
$form->get('users')->addError(new FormError($msg));
});
}
Run Code Online (Sandbox Code Playgroud)
Ber*_*sek 20
从Symfony 2.1开始,您可以使用Count约束.如果您使用的是2.0,则只需将约束复制到项目中并调整其名称空间及其API(在2.0和2.1之间略有变化).
/**
* @Assert\Count(min = 1, minMessage = "Occorre specificare almeno un utente destinatario")
*/
private $users = new ArrayCollection();
Run Code Online (Sandbox Code Playgroud)
您是否尝试过使用Count约束验证器?我想你的代码看起来像这样:
->add('users', 'entity', array(
'label' => 'Destinatari',
'class' => 'DL\FidelityBundle\Entity\User',
'property' => 'select_label',
'multiple' => true,
'constraints' => new Count(
array('min' => 1, 'minMessage' => "Please select at least one user')
),
));
Run Code Online (Sandbox Code Playgroud)
Sgo*_*kes -1
查看验证组件:http://symfony.com/doc/current/book/validation.html
您可以在要验证的对象中编写回调约束:
use Symfony\Component\Validator\ExecutionContext;
public function isUsersValid(ExecutionContext $context)
{
if ($this->users->isEmpty()) {
$propertyPath = $context->getPropertyPath() . '.users';
$context->setPropertyPath($propertyPath);
$context->addViolation('Occorre specificare almeno un utente destinatario', array(), null);
}
}
Run Code Online (Sandbox Code Playgroud)
请参阅回调约束页面,了解如何将此约束添加到您的实体(这取决于您是否使用注释或 yaml/xml)。
| 归档时间: |
|
| 查看次数: |
5883 次 |
| 最近记录: |