简体   繁体   English

RouteCollection.php第201行中的Laravel 5 MethodNotAllowedHttpException:

[英]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.

相关问题 RouteCollection.php 第 219 行中的 Laravel 5 MethodNotAllowedHttpException - Laravel 5 MethodNotAllowedHttpException in RouteCollection.php line 219 Laravel 5:RouteCollection.php第219行中的MethodNotAllowedHttpException - Laravel 5: MethodNotAllowedHttpException in RouteCollection.php line 219 RouteCollection.php第218行中的Laravel MethodNotAllowedHttpException: - Laravel MethodNotAllowedHttpException in RouteCollection.php line 218: MethodNotAllowedHttpException在laravel 5中的RouteCollection.php第207行 - MethodNotAllowedHttpException RouteCollection.php line 207 in laravel 5 Laravel-RouteCollection.php第251行中的MethodNotAllowedHttpException - Laravel - MethodNotAllowedHttpException in RouteCollection.php line 251 Laravel 5在RouteCollection.php第219行中的MethodNotAllowedHttpException: - Laravel 5 MethodNotAllowedHttpException in RouteCollection.php line 219: Laravel中RouteCollection.php第218行的MethodNotAllowedHttpException - MethodNotAllowedHttpException in RouteCollection.php line 218 in Laravel RouteCollection.php中的MethodNotAllowedHttpException-Laravel - MethodNotAllowedHttpException in RouteCollection.php - laravel RouteCollection.php Laravel中的MethodNotAllowedHttpException - MethodNotAllowedHttpException in RouteCollection.php Laravel Laravel 5中的RouteCollection.php中的MethodNotAllowedHttpException - MethodNotAllowedHttpException in RouteCollection.php in Laravel 5
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM