LaravelのルーティングでPOST渡しが上手くいかなかったときのメモです。
まず下記のようなフォームを作りました。
<form method="post" action="/user/register/">
そして下記のようなルーティングをLaravelに設定しました。
Route::group([], function () { Route::get('/user/register/', 'UserController@getRegister'); Route::post('/user/register/', 'UserController@postRegister'); });
getRegisterメソッドでフォームを表示し、postRegisterメソッドでフォームの内容を受け取るといった具合です。
まあ、こんな基本的なこと楽勝なはずですよね。
しかし、上手く行かない・・・
何回やってもフォームから送信するとgetRegisterが呼び出されてしまいます。
フォームがちゃんとPOSTで送信されていないのか?どうなってんじゃーとApacheのログを調べてみると次のようになってました。抜粋です。
POST /user/register/ HTTP/1.1" 301 GET /user/register HTTP/1.1" 200
ん?ちゃんとPOSTで送信されている。
しかし、301でリダイレクトされて、再び同じページに遷移しています。
よくよく見てみると最後のスラッシュが消されています。
調べてみると、LaravelはURLの最後にスラッシュがあると、消してリダイレクトしてしまうんですね。
そこで下記のようにフォームを修正したら、無事解決しました。
<form method="post" action="/user/register">
いやー、思わぬところで苦戦してしまいました。
ちなみにURLの最後のスラッシュを「トレイリングスラッシュ(trailing slash)」と呼ぶらしいです。