0

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';
 }
}

私がやりたいことは非常に単純ですが、Googleでもsymfony docでもこのWebサイトでも答えが見つかりませんでした。コントローラーからこの UserType にオプションを送信したいと考えています。

たとえば、「tel」と「address」の入力を追加したくない場合があります。または、この入力を必須にしたい場合もあれば、同じ入力を必須にしたくない場合もあります。

これどうやってするの ?

ありがとうございました、

4

1 に答える 1

1

私の理解が正しければ、フォームを動的に変更する必要があります。

こちらをご覧ください:フォーム イベントを使用してフォームを動的に変更する方法

アップデート

オプションをフォームに渡すには、フォームを次のように変更します。

<?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'));

お役に立てれば

于 2013-04-30T14:35:00.890 に答える