2016-11-19 14 views
1

REST APIのsymfony3とFOSRestBundleで新しいproyectを開始します。すべてが期待どおりに機能していますが、私には質問があります。Symfony FOSRestBundleアクション注文

api_marcas_get_all_marca_paginated GET ANY ANY /api/marca/{limit}/{page}.{_format} api_marcas_delete_remove_marca GET ANY ANY /api/marca/delete/{marcaid}.{_format}

の問題は、私が(ポストマンから)これを呼び出すとき:

127.0.0.1:8000/api/marca/delete/105 

他のアクション(api_marcas_get_all_marca_paginated)私は私のコントローラでこの二つの作用とルータの設定を持っています応答します...

はい..私は "DELETE" HTTPメソッドを使うことができますが、これはうまくいきます...しかし、どうしてそれらは衝突しますか?ここで

は私のアクションは、次のとおりです。

/** 
* @Rest\Get("/marca/{limit}/{page}") 
*/ 
public function getAllMarcaPaginatedAction(Request $request) 
{... code here ...} 

/** 
* @Rest\Get("/marca/delete/{marcaid}") 
*/ 
public function deleteRemoveMarcaAction(Request $request) 
{ ... //code here... } 

そのためには。

私は何か間違っていますか? アクションの順序に関係がありますか?ありがとう...

答えて

1

これらのルールは順番に考慮され、最初の一致がとられるために起こります。

あなたの例では/api/marca/delete/105最初のルールが{page}する{limit}105するdeleteと一致します。

{limit}の要件を定義して、特定のパターンのみと一致させることができます。ここでは、requirements注釈の使用方法の例をいくつか見つけることができます。反対側にはhttp://symfony.com/doc/current/bundles/FOSRestBundle/param_fetcher_listener.html

を、それがあること、お勧めは(アイテムの削除など)は、アプリケーションの状態を変更する操作のためGET方法を使用することはありません考えているのはsafe methodです。

+0

コメントありがとうございました@dubrox。このようなルートの問題を避けるためのアドバイスはありますか? –

+0

一般的にこのパターンの衝突を避けるために、 'requirements'属性の使用を提案するために私の答えを更新しました。しかし、あなたの特別な場合には、削除のために 'GET'を避け、少なくともHTTP標準' DELETE'を使用したくない場合は、少なくとも 'POST'メソッドを使用してください。 – dubrox

関連する問題