2015-07-13 111 views
0

我在Symfony中創建了一個表單類型,它擴展了抽象類型,並使用構建器添加了字段,但無論我做什麼都行不通!Symfony2表單構建器添加實體'無法加載類型實體'

class MyType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('name', 'text'); 
     $builder->add('other', 'entity', array(
      'data_class' => 'My\App\DefaultBundle\Entity\Other' 
     )); 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'runSpeeds' => 'My\App\DefaultBundle\Entity\My', 
     )); 
    } 

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

未能加載類型「實體」 500內部服務器錯誤 - InvalidArgumentException

「我的」實體有它引用「其他」使用外鍵約束的ID列。我希望我的表單基本上在「我的」表單中有一個下拉列表,它使用Other.id - > My.other_id作爲參考顯示「其他」實體中「名稱」列中的所有值。

更新

我有一個OTHERTYPE(表型)和下面的工作:

$builder>add('name', new OtherType(), array(
    'data_class' => 'My\App\DefaultBundle\Entity\Other') 
) 

但是,這顯示在表格整個實體。我只希望顯示來自其他實體的一個字段,並在下拉列表中選擇

回答

0

您沒有提供所需的選項class

由於在文件中提到的entity Field Type

編輯:

而且你有兩個語法問題( 「;」 丟失)

$builder->add('name', 'text') 
$builder->add('other', 'entity', array(
    'data_class' => 'My\App\DefaultBundle\Entity\Other' 
)) 
+0

的語法只是一個錯字。但是課程提供.....? – iswinky

+0

不,你提供'data_class'選項而不是'class'。嘗試用'class'替換'data_class' – zilongqiu

+0

對不起,您發佈我最初發布的內容時有點困惑。一個更正的版本會更好!謝謝,但它仍然錯誤! – iswinky

0

使用需要class屬性,如基本用法定義http://symfony.com/doc/current/reference/forms/types/entity.html#basic-usage

$builder->add('other', 'entity', array(
    'class' => 'DefaultBundle:Other' 
)) 

如果您的Other類實現__toString()方法,您可以使用它來確定標籤。您還可以使用property爲:

$builder->add('other', 'entity', array(
    'class' => 'DefaultBundle:Other', 
    'property' => 'name', 
)) 
0

你需要補充一點:data_class下面幾行

public function setDefaultOptions(OptionsResolverInterface $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'My\App\DefaultBundle\Entity\My' 
    )); 
} 

,並切換到class

$builder->add('other', 'entity', array(
     'data_class' => 'My\App\DefaultBundle\Entity\Other' 
    )); 
+0

我仍然收到同樣的錯誤。 – iswinky