2011-09-16 126 views
4

我得到這個錯誤:如何在Symfony 2中使用帶__toString()的表單?

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

這不是困惑我,因爲我嘗試當我得到這個錯誤,要麼是廉政局或BIGINT的呈現的字段。什麼讓我感到困惑的是我應該在哪裏使用__toString()來關聯這個字段?

此外,什麼是這個「屬性」選項錯誤消息說我可以重寫?

乾杯

編輯:

這裏的呈現形式的代碼:

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中的代碼g文件:

 <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

什麼困惑我是我應該把它放在哪裏。我是把它放在我渲染表單的地方,還是放在表單將數據放入的實體文件中,還是放在樹枝文件中?多數民衆贊成在混淆我。我不只是渲染INT和BIGINT,我還渲染VARCHAR字段。 – mickburkejnr

+0

你應該在你的實體文件中定義一個__toString()方法。 – greg0ire

相關問題