10836


api/app/Http/routes.php

[code]

    Route::resource('ranking', 'RankingController');
    
[/code]

api/app/Http/Controllers/RankingController.php

[code]

    class RankingController extends Controller {
        public function index()
        {
            return 'GET success';
        }
    
        public function store()
        {
            return 'POST success';
        }
    }
    
[/code]

上記設定でリクエスト時のパスが/rankingのときにGETだった場合はindexを、POSTだったときはstoreを呼び出すようになっているかと思います。

GETでリクエストした時は 200 okが帰ってくるのですが、POSTした時に500 internal server errorが帰ってきています。

これに関してサーバー側の問題か？laravelの設定の問題か？もわかっていません。。。  
ご助言お願い致します。

【追記】  
REST Client POST送信画像  
![REST Client　POST送信画像](https://i.stack.imgur.com/YsHTI.jpg)


CC BY-SA 3.0
2015-05-31T15:08:20.817
10823
2015-06-01T07:03:25.650
2015-06-01T04:53:14.783
5981
5981
question
php http laravel
Laravel 5 でのPOSTでのルーティングがうまくいかない


`storage/logs/laravel-yyyy-mm-dd.log`ログファイルに以下のエラーが出ているようでしたら、  
csrf_tokenが設定されていないことによるエラーです。

[code]

    [2015-06-01 06:50:23] local.ERROR: exception 'Illuminate\Session\TokenMismatchException' in /Users/who/projects/hoge_project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php:46
    
[/code]

csrf_tokenのチェックをOFFにするには`app/Http/Karnel.php`内の'App\Http\Middleware\VerifyCsrfToken'の行を削除するか、コメントにします。但し、この場合、アプリ全体でcsrf_tokenのチェックがOFFになってしまいます。

[code]

    class Kernel extends HttpKernel {
        protected $middleware = [
            'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
            'Illuminate\Cookie\Middleware\EncryptCookies',
            'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
            'Illuminate\Session\Middleware\StartSession',
            'Illuminate\View\Middleware\ShareErrorsFromSession',
    //      'App\Http\Middleware\VerifyCsrfToken',
        ];
    
[/code]

特定のルートのみcsrf_tokenのチェックをOFFにしたい場合は、以下のサイトを参考にしてください。

参考サイト  
<http://qiita.com/rana_kualu/items/3f9d0d6b9a363fd2108e>  
<http://qiita.com/zaburo/items/c054b47ed0a7be465bcf>

もうすぐリリースされる、ver 5.1
では`app/Http/Middleware/VerifyCsrfToken.php`内で、`$except`を設定することで、特定のルートのみcsrf_tokenのチェックをOFFにするのが出来るようになります。

<http://laravel.com/docs/master/routing#csrf-excluding-uris>

[code]

    <?php namespace App\Http\Middleware;
    
    use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
    
    class VerifyCsrfToken extends BaseVerifier
    {
        /**
         * The URIs that should be excluded from CSRF verification.
         *
         * @var array
         */
        protected $except = [
            'stripe/*',
        ];
    }
    
[/code]


CC BY-SA 3.0
2015-06-01T07:03:25.650
10836
2015-06-01T07:03:25.650
9529
10823
answer