Laravel:BadMethodCallException方法[show]不存在

时间:2017-08-13 01:32:33

标签: php laravel

  

(1/1)BadMethodCallException

     

方法[show]不存在。在Controller.php中(第82行)

我是Laravel和PHP的新手,并且在很长一段时间内一直坚持这个错误,其他问题没有提供解决方案。我正在关注一个例子(示例工作的地方)并且在名称更改旁边做了很少的更改。

以下是代码:

web.php文件

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时,

support/contact就是问我的问题。如果有人知道如何解决这个问题,我将非常感激。

3 个答案:

答案 0 :(得分:1)

这是因为您在routes.php文件中执行资源路由,当您必须为show方法生成路径时,您会发现它不存在的CRUD函数的所有路由。 要解决它只会创建您要求的方法,或者您也只能定义所需的路径。

答案 1 :(得分:0)

控制器正在尝试调用“show”方法 - 如果您要在浏览器中通过/support/{id}加载GET,则应该定义该方法。您可以在此处查看资源的预期方法:

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

通过使用内置生成器启动有效的控制器,您还可以让生活变得更轻松:

php artisan make:controller UserInfoController --resource

如果您不想提供所有方法,则必须指定,例如:

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

答案 2 :(得分:0)

您是否已将方法Show添加到ControllerRoute::Resource有7条基本路线:

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

如您所见,有一条名为show的路由在您路由到support时将是默认路由,因此您必须将此路由连接到resource中的控制器中的方法1}}案例CONTROLLER/show,但是在您的情况下,您尝试从名为support的前缀获取静态页面,该页面与resources不同,因为show in资源处理dynamic结果。 使用此语法从名为contact

的前缀中获取名为support的页面
Route::prefix('support')->group(function () {
    Route::get('contact', function () {
    // Matches The "/UserInfoController/contact" URL
    });
});