2016-10-17 9 views
0

多対多リレーションシップを持つ多項式フォームを設定しようとしていますが、このエラーメッセージが表示され続けます。 "プロパティパス" rozmiar "の値を変換できません。多くのsymfonyフォーム

/** 
* @var ArrayCollection 
* @ORM\ManyToMany(targetEntity="Rozmiar") 
* @ORM\JoinTable(
*  name="buty__rozmiary", 
*  joinColumns={@ORM\JoinColumn(name="buty_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="rozmiar_id", referencedColumnName="id")} 
*) 
*/ 
private $rozmiar; 
/** 
* Set rozmiar 
* 
* @param ArrayCollection $rozmiar 
* @return rozmiar 
*/ 
public function setRozmiar($rozmiar) 
{ 
    $this->rozmiar = $rozmiar; 
    return $this; 

} 

/** 
* @return ArrayCollection 
*/ 
public function getRozmiar() 
{ 
    return $this->rozmiar; 
} 

public function __construct() 
{ 
    $this->rozmiar = new ArrayCollection(); 
} 

そして、私のフォーム::これは私のエンティティがどのように見えるかです

->add('rozmiar', ChoiceType::class, array(
      'expanded' => true, 
      'multiple' => true, 
      'choices' => [35,36,37,38,39,40] 
      ) 
     ) 

私はこの作業を取得するために何をすべきか?あなたの助けを前にありがとう。

EDIT: 私は

->add('rozmiar', EntityType::class, array( 
'class' => 'ShoeShopBundle:Buty', 
'expanded' => true, 
'multiple' => true, 
'choices' => [35,36,37,38,39,40])) 

に私のFORMの一部を変更し、今私が取得しています。エラー "警告spl_object_hash()は、パラメータ1は、オブジェクト、整数与えることを期待します"。この種のフィールドで選択肢を定義する適切な方法は何ですか?

public function addRozmiar(\MyBundle\Entity\Rozmiar $rozmiar) 
{ 
    if (!$this->rozmiar->contains($rozmiar)) { 
     $this->rozmiar->add($rozmiar); 
     $rozmiar->addButy($this); 
    } 
    return $this; 
} 

Symfony2のI中:

+0

拡張をfalseに設定しようとしましたか? – DOZ

+0

'EntityType'フィールドを使用する必要があります。http://symfony.com/doc/current/reference/forms/types/entity.html – malcolm

+0

これでEntityTypeフィールドを使用すると、' - > add( 'rozmiar' 、EntityType :: class、array( 'class' => 'ShoeShopBundle:Buty'、 'expanded' => false、 'multiple' => true、 ) ) 'それは機能しますが、選択肢のリスト?私はコントローラでそれを定義する必要がありますか?私が '' choices '=> [35,36,37,38,39,40]を使用しているとき ''警告が表示されます:spl_object_hash()はパラメータ1がオブジェクトであることを期待しています、整数を指定しました " –

答えて

0

あなたが追加rozmiarは、その新しいリンクを知っているためaddRozmiarメソッドを編集する気をつけても

$editedObject = $builder->getData(); 

でEntityTypeフィールド

->add('rozmiar', EntityType::class, array(
    'class' => 'MyBundle:Rozmiar', 
    'multiple' => true, 
    'expanded' => true, 
    'choices' => $editedObject->getRozmiarChoices(), 
)) 

が必要メソッドの使用を強制するために、この値をフォームに追加する必要があります。 'by_reference' => false,

以上に関する情報:http://symfony.com/doc/current/reference/forms/types/entity.html


編集:

あなたの選択リストは、配列やクラス ":Rozmiar MyBundle" のオブジェクトのArrayCollectionのようにする必要があります。整数ではありません。 リストが編集されたオブジェクトに特に関連していない場合は、 'choices'の代わりに 'query_builder'オプションを使用することもできます。

はこちらを参照してください。http://symfony.com/doc/current/reference/forms/types/entity.html#using-a-custom-query-for-the-entities

あなたのリストを[35,36,37,38,39,40]はハードフォームでコーディングするべきではありません。 これがエンティティの場合はエンティティに配置するか、orrerの別のテーブルにブール値フィールドを追加してクエリービルダーを使用してそれらを検索する必要があります。

これは役に立ちます。

+0

私はそれにgetRozmiarChoicesメソッドを定義する必要があるので、Buty(ButyForm)という別のエンティティがありますか?エンティティ定義でgetDoctrineメソッドを動作させるにはどうすればいいですか? –

+0

助けていただきありがとうございます、今はうまくいきます。たぶんあなたはチェックボックスの代わりに複数選択リスト(1つ以上のオプションを選択するためにctrlを押す必要がない)を作る方法を知っていますか? –

+0

複数選択リストとはどういう意味ですか? –

関連する問題