RouteCollection.php 第 201 行中的 Laravel 5 MethodNotAllowedHttpException:
Posted
技术标签:
【中文标题】RouteCollection.php 第 201 行中的 Laravel 5 MethodNotAllowedHttpException:【英文标题】:Laravel 5 MethodNotAllowedHttpException in RouteCollection.php line 201: 【发布时间】:2015-09-22 14:10:33 【问题描述】:我的项目中有许多 php 文件:
admin.blade.php
:此文件包含管理表单。
调用时显示如下错误:
RouteCollection.php 第 201 行中的 MethodNotAllowedHttpException
<h2>Please Log In To Manage</h2>
<form id="form1" name="form1" method="post" action="<?=URL::to('/admin')?>">
<input type="hidden" name="_token" value=" csrf_token() ">
User Name:<br />
<input name="username" type="text" id="username" size="40" />
<br /><br />
Password:<br />
<input name="password" type="password" id="password" size="40" />
<br />
<br />
<br />
<input type="submit" name="button" id="button" value="Log In" />
</form>
在route.php
中,进行了此调用:
Route::get('/admin',array('uses'=>'student@admin'));
这是student.php
中的函数
public function admin()
return View::make('student.admin');
$validator = Validator::make($data = Input::all() , User::rules());
if ($validator->fails())
return Redirect::back()->withErrors($validator)->withInput();
else
$check = 0;
$check = DB::table('admin')->get();
$username = Input::get('username');
$password = Input::get('password');
if (Auth::attempt(['username' => $username, 'password' => $password]))
return Redirect::intended('/');
return Redirect::back()->withInput()->withErrors('That username/password combo does not exist.');
我不太了解创建管理区域,我只是想创建它。
【问题讨论】:
您在表单中使用post
方法,但在路由中使用get
方法!
我应该更改表格吗??
改变你的路线,看看会发生什么;)
把你的路由改成 post , Route::post('/admin',array('uses'=>'student@admin'));
当我同时发布到路由和表单时,它显示相同的错误,如果我同时到达,那么我在提交后一次又一次地来到同一页面。
【参考方案1】:
我就是这样做的。
Routes.php
Route::get('/admin', 'UsersController@getAdminLogin');
Route::get('/admin/dashboard', 'UsersController@dashboard');
Route::post('/admin', 'UsersController@postAdminLogin');
admin_login.blade.php
!! Form::open(['url' => '/admin']) !!
<div class="form-group">
!! Form::label('email', 'Email Id:') !!
!! Form::text('email', null, ['class' => 'form-control input-sm']) !!
</div>
<div class="form-group">
!! Form::label('password', 'Password') !!
!! Form::password('password', ['class' => 'form-control input-sm']) !!
</div>
<div class="form-group">
!! Form::submit('Login', ['class' => 'btn btn-primary btn-block']) !!
</div>
!! Form::close() !!
dashboard.blade.php
<h4 class="text-center">
Welcome Auth::user()->full_name
</h4>
UsersController.php
/**
* Display the admin login form if not logged in,
* else redirect him/her to the admin dashboard.
*
*/
public function getAdminLogin()
if(Auth::check() && Auth::user()->role === 'admin')
return redirect('/admin/dashboard');
return view('admin_login');
/**
* Process the login form submitted, check for the
* admin credentials in the users table. If match found,
* redirect him/her to the admin dashboard, else, display
* the error message.
*
*/
public function postAdminLogin(Request $request)
$this->validate($request, [
'email' => 'required|email|exists:users,email,role,admin',
'password' => 'required'
]);
$credentials = $request->only( 'email', 'password' );
if(Auth::attempt($credentials))
return redirect('/admin/dashboard');
else
// Your logic of invalid credentials.
return 'Invalid Credentials';
/**
* Display the dashboard to the admin if logged in, else,
* redirect him/her to the admin login form.
*
*/
public function dashboard()
if(Auth::check() && Auth::user()->role === 'admin')
return view('admin.dashboard');
return redirect('/admin');
您的代码:
在routes.php
,你只有1条路线,即,
Route::get('/admin',array('uses'=>'student@admin'));
并且没有声明post
方法,因此,MethodNotAllowedHttpException
此外,在您的控制器中,您首先返回视图,然后处理根本不起作用的表单。您首先需要处理表单,然后返回视图。
public function admin()
// Won't work as you are already returning the view
// before processing the admin form.
return \View::make(students.admin);
// ...
正如@Sulthan 所建议的,您应该使用Form Facade
。您可以在Laracasts 上查看this video,了解Form Facade
是什么以及如何使用它。
【讨论】:
感谢您的回答。不错的解决方案【参考方案2】:您在表单中使用 post
方法,但在路由中使用 get
方法。
所以,在你的路由中将方法更改为post
注意:
我建议您使用 Laravel 的默认表单打开方式,如下所示,这始终是最佳做法
!! Form::open(array('url' => 'foo/bar')) !!
!! Form::close() !!
提示:
Read more on here 并尝试通过比较方法和路由来调试此类事情。
默认情况下,表单外观不包含在 laravel 5 中。你应该安装它
composer require "illuminate/html":"5.0.*"
并在 app.php 中更新。
我已经写了一个blog,简要介绍了这个安装。
【讨论】:
laravel 5 默认不包含表单外观,需要安装 laravelcollective 包 @NehalHasnayeen 感谢提醒我会在答案中更新它:) @deepsingh 你收到return Input::all();
了吗?
RouteCollection.php 第 201 行中的 MethodNotAllowedHttpException:通过发布到路由并使用表单 facde 。它再次显示这个
你确定你在正确的形式和路线上,还尝试将方法更改为get
(只是盲目的方式)【参考方案3】:
在路由中 web.php 你的代码是
Route::get('/admin',array('uses'=>'student@admin'));
这是错误的。 实际上在 POST 方法中提交数据它的数据数组,所以你需要通过 post 而不是 get 路由。 所以正确的代码是
Route::post('/admin',array('uses'=>'student@admin'));
按照 Laracast 中的本教程操作可能会有所帮助,https://laracasts.com/series/laravel-from-scratch-2017/episodes/16
【讨论】:
【参考方案4】:在routes.php
中,将Route::get
替换为Route::post
。
【讨论】:
【参考方案5】:您的表单数据发布没有发布路径,请对 http 动词(获取和发布)使用路径匹配功能。用这个
Route::match(['get', 'post'], '/admin', 'student@admin');
您还需要更改您的管理方法,
public function admin(Request $request)
if($request->isMethod('get'))
return \View::make('student.admin');
else
// your validation logic
【讨论】:
谢谢..通过使用匹配..错误消失了..但提交按钮后返回管理员登录页面而不是查看页面......我该怎么办跨度> 因为你在管理方法的第一行返回登录视图,你应该使用2种不同的方法或使用条件来检查请求类型,然后处理它 我的意思是它必须去主页......但它不会去那里 那么我应该怎么处理那条线..我没有得到..我应该删除那条线还是把它放在其他地方..或者告诉我那个plz的编辑版本。 类 'App\Http\Controllers\User' 未找到.. 这是什么@Nehal hasayeen以上是关于RouteCollection.php 第 201 行中的 Laravel 5 MethodNotAllowedHttpException:的主要内容,如果未能解决你的问题,请参考以下文章
RouteCollection.php 第 218 行中的 MethodNotAllowedHttpException
Laravel 5 - RouteCollection.php 第 143 行中的 NotFoundHttpException
RouteCollection.php 第 161 行 Laravel 5.3 中的 NotFoundHttpException
Laravel 5.2:RouteCollection.php 第 219 行中的 MethodNotAllowedHttpException - 更新表单
Laravel 5.4 模块:RouteCollection.php 第 161 行中的 NotFoundHttpException
Laravel 5.3 登录路由 - RouteCollection.php 中的 NotFoundHttpException