非常に基本的なものを実行しようとしています。私は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')); ?>
任意の助けは大歓迎です。
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;
}
問題はPOSTを使用していることですが、実際にはPATCHを実行する必要があります。
<input name="_method" type="hidden" value="PATCH">
Form :: modelの直後
私の疑いは、問題はあなたのルート定義にあるということです。ルートを 'get'リクエストとして定義しましたが、フォームはおそらく 'post'リクエストを送信しています。ルート定義を変更してください。
Route::post('/validate', 'MemberController@validateCredentials');
一般的には名前付きルートを使用することをお勧めします(コントローラのメソッドやクラスが変更された場合には拡張するのに役立ちます)。
Route::post('/validate', array('as' => 'validate',
'uses' => 'MemberController@validateCredentials'));
フォームに以下を使用してください
<?php echo Form::open(array('route' => 'validate')); ?>
私もこの問題に遭遇しました、そして、ここでの他の答えは役に立ちましたが、私はGET
、POST
、および他の要求を処理するRoute::resource
を使用しています。
私の場合は、ルートをそのままにしました。
Route::resource('file', 'FilesController');
そして私のstore
の中のFilesController
関数にサブミットするように私のフォームを単に修正しました
{{ Form::open(array('route' => 'file.store')) }}
これで問題は解決しました。他のさまざまな回答から新しいPOST
ルートを追加することを提案されているので、個別の回答として指摘する価値があると思いました。これはオプションですが、必須ではありません。
通常MethodNotAllowedHttpException
は次の場合に起こります、
ルート方法が一致しません。
POST
requestルートファイルを定義し、GET
Requestをルートに送信するとします。
<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>
デフォルトでは、Form::open()
はPOST
メソッドを想定しています。
あなたはあなたのルートに入った。対応する経路でそれをpost
に変更してください。
あるいはgetメソッドを使いたい場合は、method
パラメータを追加してください。
例えば.
Form::open(array('url' => 'foo/bar', 'method' => 'get'))
これは、getメソッドを通してデータを投稿しているからです。
Route::get('/validate', 'MemberController@validateCredentials');
これを試して
Route::post('/validate', 'MemberController@validateCredentials');
私はエラーに直面しました、
問題は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)を取り除いた))}}
一般に使用されているHTTP動詞には間違いがあります。例:POSTリクエストでPUTルートを呼び出す
私の場合は、HTTP経由でPOST要求をサーバーに送信していました。nginxを設定して、すべての要求をポート80からポート443にリダイレクトし、そこでHTTPSでアプリケーションを処理していました。
正しいポートにリクエストを送信すると、問題が直接修正されました。私の場合は、デフォルトのポート80と443をそれぞれ使用していたので、リクエストURLの(http://)を(https://)に置き換えるだけです。
私も同じエラーがありましたが、私が持っていた私のXYZ.blade.phpで、異なる修正をしました:
{!! Form::open(array('url' => 'services.store')) !!}
これは私にエラーを与えました - 私は今なぜ今もしていません - しかし私がそれをに変更したとき
{!! Form::open(array('route' => 'services.store')) !!}
出来た!
共有する価値があると思いました:)
私の問題は、私のルートが間違って設定されていることではなく、間違ったForm
メソッドを参照していたことです(私はこれを別のフォームからコピーしました)。やっていた….
{!! Form::model([ ... ]) !!}
(モデル指定なし)しかし、私は通常のopen
メソッドを使っていたはずです...
{!! Form::open([ ... ]) !!}
model
への最初のパラメータは実際のモデルを想定しているので、それは私が指定していた私のオプションのどれも得ていませんでした。これが自分のルートが正しいことを知っている人を助けてくれることを願っていますが、他の何かがおかしいです。
よく私はこれらの問題を抱えていたとき私は2つのコードエラーに直面しました
{!! Form::model(['method' => 'POST','route' => ['message.store']]) !!}
私はこれをやってそれを修正しました
{!! Form::open(['method' => 'POST','route' => 'message.store']) !!}
それで、単に展開するために、私はフォームmodel
をopen
に変更しました、そしてまた、間違って角括弧に置かれたところの経路。
私の場合は、私のフォームが別のミドルウェアのあるルートに送信していたためです。そのため、この特定の経路への情報送信をブロックしました。
セキュリティ上の理由から、Laravelは{!! Form::open(['url' => 'posts/store']) !!}
をサポートしていないことがあります。それがエラーが発生した理由です。以下のコードを置き換えるだけでこのエラーを解決できます
{!! Form::open(array('route' => 'posts.store')) !!}
エラーコード{!! Form::open(['url' => 'posts/store']) !!}
正しいコード{!! Form::open(array('route' => 'posts.store')) !!}