laravel 抛出 MethodNotAllowedHttpException
laravel 抛出 MethodNotAllowedHttpException
我正在尝试运行一个非常基本的东西。我习惯于使用CI,现在正在学习Laravel 4,但他们的文档并没有让我感到容易!无论如何,我正在尝试创建一个登录表单,并通过在下一个表单中打印数据来确保数据成功提交。我遇到了以下异常:\n
\nSymfony \\ Component \\ HttpKernel \\ Exception \\\n MethodNotAllowedHttpException\n
\n我的MemberController.php文件如下:\n
public function index() { if (Session::has('userToken')) { /*使用令牌从数据库中检索用户数据并加载视图*/ 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 . " 和 Password: " . $password; }else{ return View::make('members/login'); } }
\n路由如下:\n
Route::get('/', function() { return View::make('hello'); }); Route::get('/members', 'MemberController@index'); Route::get('/validate', 'MemberController@validateCredentials');
\n最后,我的login.php视图文件包含以下表单代码:\n
'MemberController@validateCredentials')); ?>
\n非常感谢您的帮助。
问题出现的原因是路由定义错误,路由被定义为GET
请求,但表单可能发送的是POST
请求。需要将路由定义修改为与表单请求方法匹配的方式。
解决方法是修改路由定义,将其改为POST
请求,并且最好使用命名路由来帮助扩展,以防控制器的方法或类发生变化。同时,在视图中使用验证路由作为表单的操作地址。
具体操作如下:
1. 修改路由定义为POST
请求:
Route::post('/validate', [MemberController::class, 'validateCredentials']);
2. 使用命名路由:
Route::post('/validate', [MemberController::class, 'validateCredentials']) ->name('member.validateCredentials');
3. 在视图中使用验证路由作为表单的操作地址:
问题的出现原因是因为在一个GET路由中进行了POST请求。解决方法是将验证操作的路由分为两个独立的GET和POST路由。
新增的路由如下:
Route::post('validate', 'MemberController'); 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; }
这样就能够避免出现"MethodNotAllowedHttpException"异常错误了。