2017-04-05 55 views
1

私は、エンティティファイルとの双方向のoneToMany関係を持つDoctrineエンティティドキュメントを持っています。したがって、1つのドキュメントには複数のファイルエンティティを含めることができますsymfonyフォームのエンティティの追加と削除

今、ドキュメントからファイルを追加したり削除したりできるsymfonyフォームを作りたいと思います。私はCollectionTypeは経由のDocumentTypeに含まれているのFileTypeを設定します。

//DocumentType.php 
$builder->add('files', Type\CollectionType::class, ['entry_type' => FileType::class]) 

//FileType.php 
$builder->add('id', Type\HiddenType::class); 

Iは、ファイルIDを持つ隠しフィールドを取得するこの方法。 DocumentからFileを削除する必要がある場合、JSを介してフィールドを無効にしたかったのです。

Could not determine access type for property "id". 

その私はフィールドのIDを使用したいという理由だけで:私はエラーを取得するので、しかし、私は、フォームを送信傾けます。もちろん、私は削除のために右のエンティティを特定するために、srcまたはFileの他の列を使用することができます。

しかし、symfonyでこの問題に対処するには全体としてより良い方法がありますか?

ここに私のエンティティのマッピング:

AppBundle\Entity\File: 
    type: entity 
    table: files 
    repositoryClass: AppBundle\Repository\FileRepository 
    manyToOne: 
     document: 
      targetEntity: Document 
      inversedBy: files 
      joinColumn: 
       onDelete: CASCADE 

AppBundle\Entity\Document: 
    type: entity 
    table: documents 
    repositoryClass: AppBundle\Repository\DocumentRepository 
    oneToMany: 
     files: 
      targetEntity: File 
      mappedBy: document 

答えて

0

これはsymfonyの問題ではありません、あなたのFileエンティティはidプロパティの値を設定するための任意の方法を持っていません。このエラーは、symfonyのフォームデータマッパーがエンティティに送信されたIDをPropertyAccessorを使用してマッピングしようとしたときに発生します。

コレクションの追加/削除のエントリを許可する場合は、allow_add/allow_deleteのオプションはtrueである必要があります。あなたは、任意のは、私が..

// DocumentType.php 
$builder->add('files', Type\CollectionType::class, [ 
    'entry_type' => FileType::class, 
    'allow_add' => true, 
    'allow_delete' => true 
]); 

// FileType.php 
// Add fields you want to show up to end-user to edit. 
$builder 
    ->add('name', Type\TextType::class) 
    ->add('description', Type\TextareaType::class) 
; 
+0

感謝を推測、symfonyのフォームは、インデックスによってそれを扱う、あなたのFileTypeにフィールドを識別する追加する必要はありませんが、どのように私は、エンティティを削除することができますか?値を変更するためのフィールドを追加しない場合、エンティティを削除する必要があることをどのようにマークできますか? – Asara

+0

はい、あなたのエントリを表示するために私の例のようないくつかのフィールドを追加する必要があります。あなたはjavascriptを使ってそれを削除するだけで、Symfonyフォームはそのエントリを削除します。 symfonyのフォームコレクションについて詳しく説明しているこのドキュメントを見てください:[フォームのコレクションを埋め込む方法](http://symfony.com/doc/current/form/form_collections.html) –

+0

私はちょうど試してみました。 JSを介して無効にし、POSTデータにはないことを確認しましたが、symfonyはそれを削除しませんでした。 ok私は再度docページをチェックします。 – Asara

関連する問題