Laravel:BadMethodCallException方法[show]不存在

(1/1) BadMethodCallException

Method [show] does not exist. in Controller.php (line 82)

I am new to Laravel and PHP and have been stuck on this error for a very long time with other questions not providing a solution. I was following an example (where the example worked) and made very little changes beside name changes.

Here is the code:

web.php file

Route::get('/', 'PagesController@home');
Route::get('faq', 'PagesController@faq');
Route::resource('support', 'UserInfoController');

UserInfoController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\UserInfo;

class UserInfoController extends Controller
{
    //
    public function create(){
        $userInfo = new UserInfo;
        return view('contact', ['userInfo' => $userInfo]);
    }

    public function store(Request $request){
        $this->validate($request, [
            'name' => 'required',
            'email' => 'required',
            'subject' => 'required',
            'description' => 'required',
        ]);

        UserInfo::create($request->all());
        return redirect()->route('contact')->with('success','Enquiry has been
         submitted successfully');
    }
}

UserInfo.php

namespace App;

    use Illuminate\Database\Eloquent\Model;

    class UserInfo extends Model {
        protected $fillable = [
          'name','email','subject','description',
        ];
    }

The Route::resource is the one giving me the problem as I am trying to access the page support/contact. Would be very grateful if someone knew how to solve this.

The controller is trying to invoke the 'show' method - which you should have defined if you're going to load /support/{id} via GET in your browser. You can see the expected methods for a resource here:

https://laravel.com/docs/5.4/controllers#resource-controllers

You can also make your life somewhat easier by starting with a valid controller by using the built in generator:

php artisan make:controller UserInfoController --resource

If you don't want to supply ALL the methods, you have to specify, for example:

Route::resource('support', 'UserInfoController', ['only' => [
    'create', 'store'
]]);

Have you added method Show to your Controller ? Route::Resource has 7 basic routes:

Verb    Path                        Action       Route Name
GET     /support                    index        support.index
GET     /support/create             create       support.create
POST    /support                    store        support.store
GET     /support/{support}          show         support.show
GET     /support/{support}/edit     edit         support.edit
PUT     /support/{support}          update       support.update
DELETE  /support/{support}          destroy      support.destroy

As you see there is a route called show which will be default when you route to support so you must connect this route to it's method in the controller which is in resource case CONTROLLER/show, however in your case you're trying to get a static page from a prefix called support which is different from resources because show in resource handling dynamic results. Use this syntax to get a page called contact from prefix called support

Route::prefix('support')->group(function () {
    Route::get('contact', function () {
    // Matches The "/UserInfoController/contact" URL
    });
});

That is because you are doing resource routes in your routes.php file that generates all the routes for the CRUD functions when you have to generate a route for the show method you find that it does not exist. To solve it only creates the methods that you ask or, also you can define only the routes that you need.