我正在symfony 2.1.9下做一些表格 由于有用的原因,我已经完成了一个FUser类,它从我的用户实体扩展而来。 我已经完成了一个UserType类,因为它能够重用我的表单。
我的UserType类如下所示:
<?php
namespace CD\BoutiqueBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('nom', 'text')
->add('prenom', 'text')
->add('mail', 'text')
->add('fb_id','hidden',array('data'=>'null'))
->add('pass', 'repeated',
array('type' => 'password', 'invalid_message' => 'The password fields must match.',
'first_options' => array('label' => 'Mot de passe'),
'second_options' => array('label' => 'Confirmer le mot de passe')))
->add('tel', 'text', array('required' => false))
->add('adresse', 'text')
->add('code_postal', 'text')
->add('ville', 'text')
->add('tel', 'text')
->add('date_naissance', 'birthday', array('widget' => 'choice', 'years' => range(1933,2013,1), 'months' => range(1,12,1), 'days' => range(1,31,1)));
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'CD\ConfigBundle\Entity\User'
));
}
public function getDefaultOptions(array $options)
{
return array(
'data_class' => 'CD\ConfigBundle\Entity\User',
);
}
public function getName()
{
return 'usertype';
}
}
我想要做的很简单,但我没有在谷歌上找到我的答案,也没有在symfony doc上找到我的答案。 我想从我的控制器向此UserType发送选项。
例如,在某些情况下,我不想添加“tel”和“adresse”输入。 或者有时候,我希望这个输入是必需的,另外,我想要不需要相同的输入。
我该怎么做?
谢谢,
答案 0 :(得分:1)
如果我理解正确,您需要动态修改表单。
看看这里:How to Dynamically Modify Forms Using Form Events
<强>更新强>
要将选项传递给表单,您可以通过以下方式修改表单:
<?php
namespace CD\BoutiqueBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$myCustomVar = $options['foo'];
$builder
->add('nom', 'text')
->add('prenom', 'text')
->add('mail', 'text')
->add('fb_id','hidden',array('data'=>'null'))
->add('pass', 'repeated',
array('type' => 'password', 'invalid_message' => 'The password fields must match.',
'first_options' => array('label' => 'Mot de passe'),
'second_options' => array('label' => 'Confirmer le mot de passe')))
->add('tel', 'text', array('required' => false))
->add('adresse', 'text')
->add('code_postal', 'text')
->add('ville', 'text')
->add('tel', 'text')
->add('date_naissance', 'birthday', array('widget' => 'choice', 'years' => range(1933,2013,1), 'months' => range(1,12,1), 'days' => range(1,31,1)));
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'CD\ConfigBundle\Entity\User',
'foo' => 'bar'
));
}
public function getName()
{
return 'usertype';
}
}
正如您在setDefaultOptions方法中看到的那样,您必须声明自定义选项。 然后在您的控制器中,您可以通过这种方式实例化您的表单:
$myForm = $this->createForm(new UserType(), $entity, array('foo' => 'baz'));
希望这有帮助