laravel throwing MethodNotAllowedHttpException

非常に基本的なものを動かそうとしています。私はCIに慣れていて、今はLaravel 4を学んでいるのですが、Laravelのドキュメントは簡単ではありません。とにかく、ログインフォームを作成し、データが正常に投稿されたことを確認するために、次のフォームにデータを印刷しようとしています。このような例外が発生しています。

Symfony #Component #HttpKernel #Exception MethodNotAllowedHttpException

また、私のMemberController.phpでは

    public function index()
    {
        if (Session::has('userToken'))
        {
            /*Retrieve data of user from DB using token & Load view*/
            return View::make('members/profile');
        }else{
            return View::make('members/login');
        }
    }

    public function validateCredentials()
    {
        if(Input::post())
        {
            $email = Input::post('email');
            $password = Input::post('password');
            return "Email: " . $email . " and Password: " . $password;
        }else{
            return View::make('members/login');
        }
    }

と routes があります。

Route::get('/', function()
{
    return View::make('hello');
});

Route::get('/members', 'MemberController@index');
Route::get('/validate', 'MemberController@validateCredentials');

そして最後に、私のビューlogin.phpには、このフォームの方向があります。

<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>

何かアドバイスがあればお願いします。

このエラーが出るのは、GETルートに投稿しているからです。

私なら、validateのルーティングを、GETPOSTの別々のルートに分けます。

**新しいルート:***。 ``php Route::post('validate', 'MemberController@validateCredentials');

Route::get('validate', function () { 。 return View::make('members/login'); });


そうすると、コントローラのメソッドは次のようになります。

``php
パブリック関数 validateCredentials()
{
    $email = Input::post('email');
    $password = Input::post('password');
    return "Email: " . $email . " and Password: " . $password;
}
解説 (0)

私は、ルートの定義に問題があるのではないかと考えています。

あなたはルートを GET リクエストとして定義しましたが、フォームはおそらく POST リクエストを送信しています。ルート定義を変更してください。

``php Route::post('/validate', 'MemberController@validateCredentials');


一般的には、名前付きのルートを使用する方が良いでしょう(コントローラのメソッドやクラスが変更された場合に、スケーリングに役立ちます)。
``php
Route::post('/validate', array(
    'as' => 'validate' となります。
    'uses' => 'MemberController@validateCredentials'
));

フォームでは以下のようにします。

<?php echo Form::open(array('route' => 'validate')); ?>
解説 (0)
|?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>

デフォルトでは、Form::open()は、POSTメソッドを想定しています。

ルートに GET と書かれている場合は、対応するルートで POST に変更してください。

または、GETメソッドを使用したい場合は、methodパラメータを追加してください。

例えば、以下のようになります。

Form::open(array('url' => 'foo/bar', 'method' => 'get')))
解説 (0)