我有以下buildForm方法:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('firstname','text',array('label'=>'First Name'))
->add('lastname','text',array('label'=>'Last Name'))
->add('dob','date',array('widget'=>'single_text','label'=>'DOB'))
->add('username','text',array('label'=>'Username'))
->add('password','password',array('label'=>'Password'))
->add('filesPassword','password',array('label'=>'My Files Password','required'=>false))
->add('email','email',array('label'=>'Email'))
->add('language','entity',array('class'=>'GWD\AdminBundle\Entity\Languages','label'=>'Language'))
->add('theme','entity',array('class'=>'GWD\AdminBundle\Entity\Themes','label'=>'Theme'))
->add('roles','entity',array('class'=>'GWD\AdminBundle\Entity\Role','label'=>'Role'))
;
}
如何在创建新记录时动态设置密码字段,并在更新记录时不需要设置密码字段?
答案 0 :(得分:9)
您可以尝试以下代码:
$builder
->add('password','password',
array(
'label' => 'Password',
'required' => is_null($builder->getData()->getId())
)
)
答案 1 :(得分:1)
下面的代码对我来说只有一个警告,密码字段会添加到表单的末尾,而不是按照我想要的顺序添加,即使我认为通过添加我想要字段出现的事件,它会成功,但它没有。
<?php
namespace GWD\AdminBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\FormEvent;
class AdministratorsType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('firstname','text',array('label'=>'First Name'))
->add('lastname','text',array('label'=>'Last Name'))
->add('dob','date',array('widget'=>'single_text','label'=>'DOB'))
->add('username','text',array('label'=>'Username'));
$builder->addEventListener(FormEvents::PRE_SET_DATA,
function(FormEvent $event) use ($builder) {
$administrator = $event->getData();
if (!$administrator || null === $administrator->getId()) {
$event->getForm()->add('password','password',array('label'=>'Password','required'=>true));
} else {
$event->getForm()->add('password','password',array('label'=>'Password','required'=>false));
}
}
);
$builder
->add('filesPassword','password',array('label'=>'My Files Password','required'=>false))
->add('email','email',array('label'=>'Email'))
->add('language','entity',array('class'=>'GWD\AdminBundle\Entity\Languages','label'=>'Language'))
->add('theme','entity',array('class'=>'GWD\AdminBundle\Entity\Themes','label'=>'Theme'))
->add('roles','entity',array('class'=>'GWD\AdminBundle\Entity\Role','label'=>'Role'))
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'GWD\AdminBundle\Entity\Administrators'
));
}
public function getName()
{
return 'gwd_adminbundle_administrators';
}
}
答案 2 :(得分:-2)
您可以在数组中添加另一个var来定义标签:
->add('firstname','text',array('label'=>'First Name', 'required' => false))