2012-04-19 18 views
0

ComboBox(html selectタグ)のデフォルト値を選択しようとして問題があります。Symfony2 FormBuilderを使用しています。ここに私のコードです:私は、私は州のフィールドで、デフォルトの州を使用NewsletterType.phpformbuilderを使用してコンボボックスのデフォルト値を選択

$n = new Foo(); 

$em = $this->getDoctrine()->getEntityManager(); 
$province = $em->getRepository('MyEntityBundle:SYS_TProvince')->find('ES-M'); 

$form = $this->createForm(new NewsletterType($province), $n); 

$request = $this->getRequest(); 
if ($request->getMethod() == 'POST') { 
    $form->bindRequest($request); 

    if ($form->isValid()) { 
     // some action 
    } 
} 

を選択するデフォルトの州番目のフォームに送信

MyController.php

class NewsletterType extends AbstractType 
{ 
    private $province; 

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

    public function buildForm(FormBuilder $builder, array $options) 
    { 
     $builder->add('idnewsletter', 'hidden'); 
     $builder->add('email', 'email'); 
     $builder->add('type', 'entity', 
      array('label' => 'type', 
       'class' => 'MeediamSplashBundle:USR_TType', 
       'property' => 'description', 
       'preferred_choices' => array(3,5,7) 
      )); 
     $builder->add('province', 'entity', 
      array('label' => 'province', 
       'class' => 'MeediamSplashBundle:SYS_TProvince', 
       'property' => 'name', 
       'data' => $this->province 
      )); 
     $builder->add('postalcode'); 
     $builder->add('status', 'hidden'); 
     $builder->add('created', 'hidden'); 
    } 

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

SYS_TProvince.phpエンティティ

<?php 

namespace SciOf\Meediam\SplashBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Symfony\Component\Validator\Constraints as Assert; 

/** 
* @ORM\Entity 
* @ORM\Table(name="SYS_TProvince") 
*/ 
class SYS_TProvince 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="string", length=5, nullable=false) 
    */ 
    protected $idprovince; 

    /** 
    * @ORM\Column(type="string", length=3, nullable=false) 
    * @Assert\NotBlank() 
    */ 
    protected $idcountry; 

    /** 
    * @ORM\Column(type="string", length=60, nullable=false) 
    * @Assert\NotBlank() 
    */ 
    protected $name; 

    public function getIdprovince()    { return $this->idprovince; } 
    public function getIdcountry()    { return $this->idcountry; } 
    public function getName()     { return $this->name; } 
    public function setIdprovince($idprovince) { $this->idprovince = $idprovince; } 
    public function setIdcountry($idcountry) { $this->idcountry = $idcountry; } 
    public function setName($name)    { $this->name = $name; } 

    public function __toString()    { return $this->idprovince; } 

} 

明らかにあらゆることがOKですが動作しません。 "preferred_choices"を使用すると動作しますが、 "data"でデフォルト値を選択することはできません。

オブジェクトがクラスに含まれている場合、 - > getIdProvice()を使用すると、オブジェクトのPKが取得され、文字列であるためエラーが発生します。

私はいくつかの情報を読んで、私は何をするかわからない:

How to set default value for form field in Symfony2? http://symfony.com/doc/current/reference/forms/types/field.html

誰かが何らかのエラーが表示していますか?

答えて

2

デフォルト値を使用する場合は、フォームを作成する前にエンティティでデフォルト値を設定する必要があります。

$yourEntity->setProvince('my default value');ようですが、あなたのケースでは、私はセッターについてはよく分からない、あなたはあなたのエンティティをしてください追加することができますか?

+0

私は実体を掲載しました。どこでこのコードを追加する必要がありますか?コントローラ? FormBuilder? – unairoldan

+0

oups遅くなりました。あなたの '$ form = $ this-> createForm(new NewsletterType($ province)、$ n);'の前にこれを追加しておきましょう。あなたの都道府県を設定する(または2つのエンティティ間に関係がある場合は複数の値を設定します)。 – Snroki

+0

それは動作します。ありがとう....しかし、好奇心から、私はエンティティクラスなしのフォームを使用している場合? – unairoldan

関連する問題