0

Symfony2 のサービスとフォームについて質問があるので、自分のカルス フォームを作成し、都市の複数選択リストを追加してから、別のクラス「都市」から都市のリストを取得したいので、クラスを呼び出す方法を教えてください」 "Service" を使用して関数 "getcities" を取得し、都市のリストを返しますか? (ここでは Doctrine を使用しません)...

編集

 namespace Acme\DemoBundle\Form\Type;

 use Symfony\Component\Form\AbstractType;
 use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class CityType extends AbstractType
{ 
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'choices' => array( /**
                     * Here I will call function getcities(return list of cities)
                      */

        )
    ));
}

public function getParent()
{
    return 'choice';
}

public function getName()
{
    return 'gender';
}
}

クラス City.php :

Class City {

  /**
   * here i will get list of cities 
   */


  public function getcities()
  {
     .....
    return $Listcities;
  }

  }

「Service」を使用して関数「getcities」をフォームで呼び出したいですか?

4

2 に答える 2

2

フォームオブジェクトはコンテナ対応ではありません...少なくとも、そうするつもりはありません。つまり、コントローラーはサービスを使用して都市を取得し、コンストラクターまたはメソッドを介してそのリストをフォーム オブジェクトに渡す必要があります。

コントローラ:

class SomethingController
{
    public function someAction()
    {
        ...
        $cities = $this->get("citiesService")->getCities();
        $form = $this->createForm(new SomeType($cities), $someEntity);
        ...
    }
}

形:

class SomeType extends AbstractType
{
    private $cities;

    public function __construct($cities)
    {
        $this->cities = $cities;
    }

    public function buildForm(FormBuilder $builder, array $options)
    {
        // Now you have access to $this->cities, so you can use it to build the form
    }
}
于 2012-10-02T17:01:17.940 に答える
0

Cityオブジェクトをフォームデータオブジェクトとして設定できますか?

だからそれはそのように見えることができます...

$form = $this->createForm(new SomeType(), new City());

class SomeType extends AbstractType
{ 
    public buildForm(FormBuilderInterface $builder, array $options)
    {
        $formFactory = $builder->getFormFactory();

        $builder->addEventListener(
            FormsEvents::PRE_SET_DATA,
            function (FormEvent $event) use ($formFactory) {
                $event->getForm()->add(
                    $formFactory->createNamed(
                        'gender',
                        'choice',
                        null,
                        array(
                            'choices' => $event->getData()->getCites()
                        )
                    )
                );
            }
        );
    }
}
于 2012-10-02T17:48:42.080 に答える