2011-09-16 3 views
4

私はこのエラーを取得する:私は、私はこのエラーを取得するときに、レンダリングしてみフィールドはどちらかINTのかBIGINTのあるようSymfony 2のフォームで__toString()を使用するにはどうすればよいですか?

Entities passed to the choice field must have a "__toString()" method defined (or you can also override the "property" option).

これは、私を混乱されていません。フィールドと関連して__toString()を使用する場所が私を混乱させます。

また、この「プロパティ」オプションとは何ですか?というエラーメッセージが表示されます。

乾杯

EDIT:

public function buildForm(FormBuilder $builder, array $options) 
    { 
     $builder->add('id'); 
     $builder->add('title'); 
     $builder->add('slug'); 
     $builder->add('content'); 
     $builder->add('keywords'); 
     $builder->add('contenttype'); 
     $builder->add('hits'); 
     $builder->add('mainpage'); 
     $builder->add('hasmainpage'); 
     $builder->add('ismainpage'); 
    } 

ここでこれを扱う私のコントローラクラスのコードです:

$pageadd = new Content(); 
    $form = $this->createForm(new PageAdd(), $pageadd); 

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

     if ($form->isValid()) { 

      $em = $this->getDoctrine() 
         ->getEntityManager(); 
      $em->persist($pageadd); 
      $em->flush(); 

      return $this->redirect($this->generateUrl('ShoutAdminBundle_add')); 
     } 
    } 

    return $this->render('ShoutAdminBundle:Default:pageadd.html.twig', array(
     'form' => $form->createView() 
    )); 

ここでは、フォームをレンダリングするコードですそしてここに私のTwiのコードがありますグラムファイル:

 <form action="{{ path('ShoutAdminBundle_adminpageadd') }}" method="post" {{ form_enctype(form) }} class="blogger"> 
      {{ form_errors(form) }} 

      <p class="row"> 
       {{ form_label(form.id, 'ID*', { 'attr': {'class': 'title'} }) }} 
       {{ form_errors(form.id) }} 
       {{ form_widget(form.id, { 'attr': {'class': 'textfield'}}) }} 
      </p> 
      <p class="row"> 
       {{ form_label(form.title, 'Title*', { 'attr': {'class': 'title'} }) }} 
       {{ form_errors(form.title) }} 
       {{ form_widget(form.title, { 'attr': {'class': 'textfield'}}) }} 
      </p> 
      <p class="row"> 
       {{ form_label(form.slug, 'Slug*', { 'attr': {'class': 'title'} }) }} 
       {{ form_errors(form.slug) }} 
       {{ form_widget(form.slug, { 'attr': {'class': 'textfield'}}) }} 
      </p> 
      <p class="row"> 
       {{ form_label(form.content, 'Content*', { 'attr': {'class': 'title'} }) }} 
       {{ form_errors(form.content) }} 
       {{ form_widget(form.content, { 'attr': {'class': 'textfield'}}) }} 
      </p> 
      <p class="row"> 
       {{ form_label(form.keywords, 'Keywords*', { 'attr': {'class': 'title'} }) }} 
       {{ form_errors(form.keywords) }} 
       {{ form_widget(form.keywords, { 'attr': {'class': 'textfield'}}) }} 
      </p> 
      <p class="row"> 
       {{ form_label(form.contenttype, 'Content Type*', { 'attr': {'class': 'title'} }) }} 
       {{ form_errors(form.contenttype) }} 
       {{ form_widget(form.contenttype, { 'attr': {'class': 'textfield'}}) }} 
      </p> 
      <p class="row"> 
       {{ form_label(form.hits, 'Hits*', { 'attr': {'class': 'title'} }) }} 
       {{ form_errors(form.hits) }} 
       {{ form_widget(form.hits, { 'attr': {'class': 'textfield'}}) }} 
      </p> 
      <p class="row"> 
       {{ form_label(form.mainpage, 'Main Page*', { 'attr': {'class': 'title'} }) }} 
       {{ form_errors(form.mainpage) }} 
       {{ form_widget(form.mainpage, { 'attr': {'class': 'textfield'}}) }} 
      </p> 
      <p class="row"> 
       {{ form_label(form.hasmainpage, 'Has Main Page*', { 'attr': {'class': 'title'} }) }} 
       {{ form_errors(form.hasmainpage) }} 
       {{ form_widget(form.hasmainpage, { 'attr': {'class': 'textfield'}}) }} 
      </p> 
      <p class="row"> 
       {{ form_label(form.ismainpage, 'Is Main Page*', { 'attr': {'class': 'title'} }) }} 
       {{ form_errors(form.ismainpage) }} 
       {{ form_widget(form.ismainpage, { 'attr': {'class': 'textfield'}}) }} 
      </p> 

      {{ form_rest(form) }} 
      <p class="row"> 
       <input type="submit" value="Save This Page" class="savebutton" /> 
      </p> 
     </form> 

答えて

14

私は、このblog postのおかげでそれをうながしました。

私は最初にgreg0ireをアドバイスしましたが、まだエラーが発生しました。私が実現何

$builder->add('hasmainpage','entity', array('class'=>'Shout\AdminBundle\Entity\Admin', 'property'=>'id',)); 

(私は元の質問を書いている時点では知らなかった)であったフィールドがそれに接続されている関係を持っていたため、エラーが発生したこと、そしてとき:私はしかしだった私が追加しましたそれは関係のためにできなかったフィールドをレンダリングしようとしました。

ありがたいことに修正されました。

+2

array( 'class' => 'ShoutAdminBundle :: Admin')で簡単にすることができます – rooney

+1

@mickburkejnrありがとうこのような簡単な答えのために、7時間の検索の後、私はこの答えを見つけて助けました。今私は複数の選択肢のリストを取得しているが、私はドロップダウンが欲しい。助けてください – ScoRpion

+0

buildFormセクション内にドロップダウンフィールドを作成します。手渡すコードはありませんが、SymfonyのドキュメントのFormsページを見ると、そこに答えがあります。 – mickburkejnr

0

私は、プロパティのオプションは、あなたのオブジェクトをエコーするとき取得したいプロパティの名前で満たされる必要がありますね。私はあなたがではないことを理解していませんこのエラーを取得し、INTまたはBIGINTのみをレンダリングすると混乱します。

+0

私はそれを置くはずです。私はフォームをレンダリングしている場所に置いていますか、フォームにデータを置くEntityファイルに入れてもいいですか、それをtwigファイルに入れますか?それは私を混乱させるものです。私はINTとBIGINTをレンダリングするだけではなく、VARCHARフィールドもレンダリングしています。 – mickburkejnr

+0

エンティティファイルに__toString()メソッドを定義する必要があります。 – greg0ire

関連する問題