2011-10-27 7 views
1

私はSymfonyでAJAXリクエストを通じて呼び出されるRESTfulインターフェイスを設計しようとしています。私の代わりに、私は以下の作成したもので、私のPOSTメソッドルートは内蔵のリダイレクトコントローラに適合している問題を抱えてきた:ルートがリダイレクトコントローラに正しく関連付けられていません

/** 
* @Route("/todos") 
*/ 
class TodoController extends Controller 
{ 
    /** 
    * @Route("/", name="todos") 
    * @Method("GET") 
    */ 
    public function indexAction() 
    { 
     // Get action here 
    } 

    /** 
    * @Route("/{id}", name="todo_delete") 
    * @Method("DELETE") 
    */ 
    public function deleteAction($id) 
    { 
    // Delete action here 
    } 

    /** 
    * @Route("/", name="todo_create") 
    * @Method({"POST"}) 
    */ 
    public function createAction() 
    { 
     return new Response("Hello!"); 
    } 
} 

マイindexActionとdeleteActionを正常に動作しますが、私のcreateActionはしませんでした。私は、ログを見ると、これは私が見たものである:

[2011-10-24 19:27:14] request.INFO: Matched route "todo_create" (parameters: "_controller": "Symfony\Bundle\FrameworkBundle\Controller\RedirectController::urlRedirectAction", "path": "/todos/", "permanent": "true", "scheme": "null", "httpPort": "80", "httpsPort": "443", "_route": "todo_create") [] [] 

私のルートがさえ、私が作成したTodoControllerに関連付けされていないように見えます。これを引き起こす原因は何ですか?

答えて

0

私はそれを理解しました。私のクライアント側のコードは "http://todos.localhost/todos"と呼ばれ、ルートは "http://todos.localhost/todos/"(後に/が付いています)を待っていました。 POSTリクエストルートのスラッシュを次のように削除しました。

/** 
* @Route("", name="todo_create") 
* @Method({"POST"}) 
*/ 

すべて正常です。

Symfonyはスラッシュが見つからないことを認識してリクエストURLに追加し、新しいURLを使用して内部リダイレクトを実行したようです。しかし、Symfonyがリダイレクトを実行したとき、リクエストメソッド(この場合はPOST)は維持されませんでした。代わりに、私のGETコントローラを呼んでいました。

1
---> @Method({"POST"}) 

はそれが

@Method("POST") 

ではないでしょうか?

+0

公式文書は現在、({"POST"、 "GET"})などと書かれていますが、私が見る限り、他の人たちがもっと驚いています。私はそれより新しいですが、おそらくそれはこの質問以来変わっています。 –

関連する問題