2017-11-29 4 views
0

symfonyプロジェクトにいくつかのAPIを実装しようとしています。現在のところ、プロジェクトには、htmlテーブル、フォーム/バリデータなどに基づいて、標準的なcrudを持つ多くのコントローラがあります。api-platformでセーブアクションを作成する方法

私はapi-platformプロジェクトを見ています。それは私の必需品に合う部分を得る。 POST/PUT/DELETEの部分では、エンティティに対する非常に基本的な持続アクションを継ぎ目があり、突然プロジェクトでは、エンティティの永続化後にさらに多くのアクションを実行する必要があります。

私は、ドキュメントを赤と私はそれを行う方法については本当に困惑している... を私は二つの可能性を参照してください。すべてのエンティティ

ためPOST_WRITEのためにサブスクライブ、イベントシステムを使用して

  • をすべてのためのカスタムアクションを作成

  • は、両方の場合には

エンティティの/更新/削除アクションを作成、私は本当に高いのnを持っているでしょうプロジェクト内のシングルアクションまたはイベントサブスクライバの数(30/40)、維持することは本当に不愉快です。また、古い形式のシステムを維持して、API形式ですべてrewittenするまで、コントローラに既にある同じコードを複製する必要があります。

この問題にどのようにアプローチするかについてのご意見はありますか?

FOSRestBundleと同じコントローラアクションを使用する方法はありません。そのため、データを受け取り、さまざまな検証/持続/追加アクションを実行してから、 APIのプラットフォームイベント?

デシリアライズ/シリアライズ、標準コントローラアクションからのフィルタとページ付けのような、手動でAPIプラットフォームの一部を呼び出す方法はありますか?

私は完全にあなたの質問を理解していない場合は、すべての 乾杯 ダニエル

答えて

0

のおかげで、私を許していますが、多分、あなたはすでに機能がコントローラに書かれているし、あなたがAPI経由で同じアクションにアクセスする場合アクションごとに複数のルートを設定でき、アクションの呼び出し方法によって異なる応答をすることができます。たとえば:

/** 
* @Route("/api/v1/tester", name="api_tester") 
* @Route("/tester", name="tester") 
*/ 
public function testerAction(Request $request) 
{ 
    $route = $request->attributes->get('_route'); 

    if($route == "api_tester") 
     #..do things the api way 
     response = array("success" => 1, "data" => $return_string); 
     return new Response(json_encode($response)); 
    } else { //non-api 
     $this->render('tester/basic.html.twig', array(); 
    } 
} 

あなたは、使用されたルートを評価することができますし、あなたの行動のさまざまなセクションであなたは、アクションは、APIを介して、または通常のリクエストから呼び出された場合に基づいて、違ったものを処理することができます。

+0

回答ありがとう: 私は試してみましたが、これはFOSRestBundleで簡単に行うことができます。これは、マルチルートとシリアライゼーションを管理しますが、フィルタリング/クエリ構築のようなものではありません。 これらのタイプのアクションを実行するものを探していますが、これは多くの面白いことですが、mvcロジックの通常のコントローラーではなく、アクションやイベント(adr)に基づいて異なるもので動作します。私は2つの世界をどのように組み合わせるかを理解しようとしていました:) –

関連する問題