非常に基本的なものを動かそうとしています。私は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
のルーティングを、GET
とPOST
の別々のルートに分けます。
**新しいルート:***。 ``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;
}
私は、ルートの定義に問題があるのではないかと考えています。
あなたはルートを 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')); ?>
|?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>
デフォルトでは、Form::open()
は、POST
メソッドを想定しています。
ルートに GET
と書かれている場合は、対応するルートで POST
に変更してください。
または、GET
メソッドを使用したい場合は、method
パラメータを追加してください。
例えば、以下のようになります。
Form::open(array('url' => 'foo/bar', 'method' => 'get')))