web-dev-qa-db-ja.com

MethodNotAllowedHttpExceptionをスローする

非常に基本的なものを実行しようとしています。私はCIに慣れていて、今はLaravel 4を学んでいますが、彼らの文書ではそれが簡単にはできません!とにかく、私はログインフォームを作成しようとしていて、データが次のフォームでそれを印刷することによってうまく投稿されていることを確認するだけです。私はこの例外を受けています:

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');
        }
    }

そしてルートがあります:

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')); ?>

任意の助けは大歓迎です。

94
spacemonkey

GETルートにPOSTしているため、このエラーが発生しています。

"validate"のためのあなたのルーティングを別々のGETとPOSTルートに分割します。新しいルート

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

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

それならあなたのコントローラーメソッドはちょうど

public function validateCredentials()
{
    $email = Input::post('email');
    $password = Input::post('password');
    return "Email: " . $email . " and Password: " . $password;
}
187
hayhorse

問題はPOSTを使用していることですが、実際にはPATCHを実行する必要があります。

<input name="_method" type="hidden" value="PATCH">

Form :: modelの直後

22
Eli

私の疑いは、問題はあなたのルート定義にあるということです。ルートを 'get'リクエストとして定義しましたが、フォームはおそらく 'post'リクエストを送信しています。ルート定義を変更してください。

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

一般的には名前付きルートを使用することをお勧めします(コントローラのメソッドやクラスが変更された場合には拡張するのに役立ちます)。

Route::post('/validate', array('as' => 'validate', 
    'uses' => 'MemberController@validateCredentials'));

フォームに以下を使用してください

<?php echo Form::open(array('route' => 'validate')); ?>
20
Blessing

私もこの問題に遭遇しました、そして、ここでの他の答えは役に立ちましたが、私はGETPOST、および他の要求を処理するRoute::resourceを使用しています。

私の場合は、ルートをそのままにしました。

Route::resource('file', 'FilesController');

そして私のstoreの中のFilesController関数にサブミットするように私のフォームを単に修正しました

{{ Form::open(array('route' => 'file.store')) }}

これで問題は解決しました。他のさまざまな回答から新しいPOSTルートを追加することを提案されているので、個別の回答として指摘する価値があると思いました。これはオプションですが、必須ではありません。

11
Dan

通常MethodNotAllowedHttpExceptionは次の場合に起こります、

ルート方法が一致しません。

POST requestルートファイルを定義し、GET Requestをルートに送信するとします。

9

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

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

あなたはあなたのルートに入った。対応する経路でそれをpostに変更してください。

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

例えば.

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

7
itachi

これは、getメソッドを通してデータを投稿しているからです。

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

これを試して

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

私はエラーに直面しました、
問題はFORM METHODでした

 {{Form :: open(array( 'url' => 'admin/doctor/edit /'。$ doctor-> doctor_id、 'class' => 'フォーム - 水平フォーム - ボーダーフォーム - 行 - '、' method '=>' PUT '、' files '=> true)を取り除いた))}} 

それはこのようなはずです

 {{Form :: open(array( 'url' => 'admin/doctor/edit /'。$ doctor-> doctor_id、 'class' => 'フォーム - 水平フォーム - ボーダーフォーム - 行 - '、' method '=>' POST '、' files '=> true)を取り除いた))}} 
4
Faruk Omar

一般に使用されているHTTP動詞には間違いがあります。例:POSTリクエストでPUTルートを呼び出す

3
Slimane MEHARZI

私の場合は、HTTP経由でPOST要求をサーバーに送信していました。nginxを設定して、すべての要求をポート80からポート443にリダイレクトし、そこでHTTPSでアプリケーションを処理していました。

正しいポートにリクエストを送信すると、問題が直接修正されました。私の場合は、デフォルトのポート80と443をそれぞれ使用していたので、リクエストURLの(http://)を(https://)に置き換えるだけです。

3
iSWORD

私も同じエラーがありましたが、私が持っていた私のXYZ.blade.phpで、異なる修正をしました:

{!! Form::open(array('url' => 'services.store')) !!}

これは私にエラーを与えました - 私は今なぜ今もしていません - しかし私がそれをに変更したとき

{!! Form::open(array('route' => 'services.store')) !!}

出来た!

共有する価値があると思いました:)

2
Ahmed Albarody

私の問題は、私のルートが間違って設定されていることではなく、間違ったFormメソッドを参照していたことです(私はこれを別のフォームからコピーしました)。やっていた….

{!! Form::model([ ... ]) !!}

(モデル指定なし)しかし、私は通常のopenメソッドを使っていたはずです...

{!! Form::open([ ... ]) !!}

modelへの最初のパラメータは実際のモデルを想定しているので、それは私が指定していた私のオプションのどれも得ていませんでした。これが自分のルートが正しいことを知っている人を助けてくれることを願っていますが、他の何かがおかしいです。

2
philthathril

よく私はこれらの問題を抱えていたとき私は2つのコードエラーに直面しました

{!! Form::model(['method' => 'POST','route' => ['message.store']]) !!}

私はこれをやってそれを修正しました

{!! Form::open(['method' => 'POST','route' => 'message.store']) !!}

それで、単に展開するために、私はフォームmodelopenに変更しました、そしてまた、間違って角括弧に置かれたところの経路。

0
Fillz Adebayo

私の場合は、私のフォームが別のミドルウェアのあるルートに送信していたためです。そのため、この特定の経路への情報送信をブロックしました。

0
GabrielFiel

セキュリティ上の理由から、Laravelは{!! Form::open(['url' => 'posts/store']) !!}をサポートしていないことがあります。それがエラーが発生した理由です。以下のコードを置き換えるだけでこのエラーを解決できます

{!! Form::open(array('route' => 'posts.store')) !!}




エラーコード{!! Form::open(['url' => 'posts/store']) !!}

正しいコード{!! Form::open(array('route' => 'posts.store')) !!}

0
Ariful Islam