[英]Laravel 5 MethodNotAllowedHttpException in RouteCollection.php line 201:
I have a number of php files in my project: 我的项目中有很多php文件:
admin.blade.php
: this files contains the admin form. admin.blade.php
:这个文件包含管理表单。
When called it show the following error: 调用时显示以下错误:
MethodNotAllowedHttpException in RouteCollection.php line 201 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>
In route.php
, this call is made: 在route.php
,进行以下调用:
Route::get('/admin',array('uses'=>'student@admin'));
This is the function in student.php
这是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.');
}
}
I don't know much about creating an admin area, I am just trying to create it. 我不太了解创建管理区域,我只是想创建它。
This is how I do it. 我就是这样做的。
Routes.php routes.php文件
Route::get('/admin', 'UsersController@getAdminLogin');
Route::get('/admin/dashboard', 'UsersController@dashboard');
Route::post('/admin', 'UsersController@postAdminLogin');
admin_login.blade.php 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 dashboard.blade.php
<h4 class="text-center">
Welcome {{ Auth::user()->full_name }}
</h4>
UsersController.php 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');
}
Your Code: 你的代码:
In routes.php
, you have only 1 route, ie, 在routes.php
,您只有1条路线,即
Route::get('/admin',array('uses'=>'student@admin'));
And there is no declaration of post
method, hence, the MethodNotAllowedHttpException
并且没有post
方法的声明,因此, MethodNotAllowedHttpException
Also, in your controller, you are returning the view first and then processing the form which is not going to work at all. 此外,在您的控制器中,您首先返回视图,然后处理根本不起作用的表单。 You first need to process the form and then return the view. 首先需要处理表单然后返回视图。
public function admin(){
// Won't work as you are already returning the view
// before processing the admin form.
return \View::make(students.admin);
// ...
}
As @Sulthan has suggested, you should use Form Facade
. 正如@Sulthan建议的那样,您应该使用Form Facade
。 You can check out this video on Laracasts about what Form Facade
is and how you should use it. 你可以看看这个视频在Laracasts什么Form Facade
是,你应该如何使用它。
You're using post
method in the form but you're having get
method in the routes. 你在表单中使用post
方法但是你在路由中有get
方法。
So, Change the method to post
in your routes 因此,更改要在路线中post
的方法
Note : 注意 :
I recommend you to make use of the default form opening of Laravel like the below given which is always the best practise 我建议你使用Laravel的默认表格开头,如下所示,这始终是最好的做法
{!! Form::open(array('url' => 'foo/bar')) !!}
{!! Form::close() !!}
Tips : 提示 :
Read more on here and try to debug such things by comparing the methods and routes. 在这里阅读更多内容并尝试通过比较方法和路线来调试这些事情。
Form facade is not included in laravel 5 by default. 窗体外观默认不包含在laravel 5中。 You shall install it by 你应该安装它
composer require "illuminate/html":"5.0.*"
and updating in the app.php. 并在app.php中更新。
I have written a blog which gives a breif about this installation. 我写了一篇关于这个安装的博客 。
In Routes web.php Your code is 在Routes web.php你的代码是
Route::get('/admin',array('uses'=>'student@admin'));
which is wrong. 这是错的。 Actually submitting data in POST method its array of data so you need to route through post instead of get. 实际上在POST方法中提交数据的数据数组,所以你需要通过post而不是get来路由。 so correct code is 所以正确的代码是
Route::post('/admin',array('uses'=>'student@admin'));
Follow this tutorial form Laracast it might helpful, 按照Laracast的本教程形式,它可能有帮助,
https://laracasts.com/series/laravel-from-scratch-2017/episodes/16 https://laracasts.com/series/laravel-from-scratch-2017/episodes/16
在routes.php
,将Route::get
替换为Route::post
。
You have no post route for your form data posting , use route match function for both http verb (get & post). 您没有表单数据发布的发布路径,请使用http动词(get&post)的路由匹配功能。 use this 用这个
Route::match(['get', 'post'], '/admin', 'student@admin'); Route :: match(['get','post'],'/ admin','student @ admin');
Also you need to change your admin method, 您还需要更改管理方法,
public function admin(Request $request){
if($request->isMethod('get')){
return \View::make('student.admin');
} else {
// your validation logic
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.