(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
就是问我的问题。如果有人知道如何解决这个问题,我将非常感激。
答案 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
添加到Controller
? Route::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
});
});