3

一方向の多対 1 の関係にある 2 つのエンティティ クラスと、独自のフォーム タイプを使用してそれぞれの作成、フェッチ、更新、および削除を処理する 2 つの fos レスト コントローラーがあります (ここで説明)。

関連(トピック)の「多」側に新しいエンティティを作成するときに、「一」側(カテゴリ)の既存のエンティティとリンクしたい。Topic のフォーム タイプは次のようになります。

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('category', 'entity', array('class' => 'MyNiceBundle:Category', 'property' => 'id'))
    ;
}

しかし、フォームの投稿リクエストは受け付けません

{"my_form":{"category":{"id":2, "aProperty":"bla"}}}

また

{"my_form":{"category":{"id":2}}}

私が得るエラーは "category":{"errors":["This value is not valid."]}}

結局、私は送信することを知りました

{"my_form":{"category":2}}

実際に働いた。しかし、GET を使用してトピックを取得すると、少し面倒です。

{"id":1, "category":{"id":2, "aProperty":"bla"}}

そしてそうではない

{"id":1, "category":2}

そのため、PUT で更新を行う前に、カテゴリ プロパティをその ID で上書きする必要があります...

これを行うためのより良い方法があると確信しています。何かアドバイス?

4

2 に答える 2

0

残りのサーバー側の PUT コントローラーを変更して、両方の方法と互換性を持たせます。

{"my_form":{"category":2}}

{"my_form":{"category":{"id":2, "aProperty":"bla"}}}

これを行うと、カテゴリ オブジェクトについて心配する必要がなくなり、すべてが put コントローラーによって行われ、フォーム データを挿入してから、 isValid() メソッドを呼び出して formType と Voilà の正しい構文を呼び出します。少なくとも、私はそうします。

于 2013-10-24T09:49:27.423 に答える
0

公式リポジトリでイシューをオープンしました: https://github.com/FriendsOfSymfony/FOSRestBundle/issues/984

適切な解決策が提案され次第、この回答を拡張します。

于 2015-03-02T19:46:19.460 に答える