php - Laravel 无法识别控制器 __invoke()
问题描述
尽管经历了几篇类似的帖子,但无法调试这个简单的路由问题。
TestController
是不可调用的。控制器类 TestController 不可调用。您是否忘记添加 __invoke 方法或者您的路由文件中缺少控制器的方法?
我在 Stack 上玩过尽可能多的排列,但没有任何改变。我已经确认了简单的路由,即:
Route::get('/', function () {
return view('welcome');
});
工作,但我不能让控制器工作。我已经清除了缓存并取消了 $namespace 的注释,没有任何区别。事实上,错误消息似乎没有改变,这让我相信这不是路由,而是与控制器有关。但我是新手,没有看到。
来自 web.php:
Route::get('/test', TestController::class);
测试控制器.php:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class TestController extends Controller {
public function __invoke() {
return view('welcome');
}
}
解决方案
当您没有控制器的 FQCN 的 use 语句时,通常会发生这种情况。
在声明路由的路由文件中,确保添加了 Controller 命名空间的 use 语句。特别是从 Laravel 8.x 开始,控制器的默认命名空间没有设置为App\Http\Controllers
与早期版本不同。
//routes file
use App\Http\Controllers\TestController;
Route::get('/test', TestController::class);
顺便说一句,如果您使用可调用的控制器类仅返回一个视图,则可以改用 Route::view() 方法
//Assuming that you have a resources/views/test.blade.php
Route::view('/test', 'test');
推荐阅读
- html - 子元素的位置如何影响元素的 z-index
- python - Pandas read_csv 突然将 int 作为对象读取,我无法更改它
- excel - 当所需的匹配项嵌入到文本中时,从 VLOOKUP 返回结果
- java - javax.ejb.Remote 无法在 Spring Boot 中解决
- google-cloud-platform - Terraform:log export sink 在正常工作一段时间后抛出此错误“permission denied on bucket”
- ios - 将声明与 Swift 完成处理程序混淆
- php - 在 null 上调用成员函数 AddAddress()
- ios - 构建目标 MyNotificationService:找不到框架
- docker - 如何在 Docker 中更新网站?(本地)
- css - 当不透明度小于1时如何停止用户填写表格