我有一个非常简单的路由.php文件:
<?php
Route::get('/', 'TracksController@index');
一个简单的 TracksController.php 文件位于 App''Http''Controllers:
<?php
namespace App'Http'Controllers;
use Illuminate'Http'Request;
use App'Http'Requests;
use App'Track as Track;
class TracksController extends Controller
{
function index(){
$tracks = Track::latest->get();
return view('tracks')->with(compact('tracks'));
}
}
但是每当我尝试访问该路由时,都会收到此错误:
ReflectionException in Route.php line 280:
Class App'Http'Controllers'TracksController does not exist
我不知道我还能做什么。我有:
- 运行作曲家转储自动加载
- 运行 php 工匠清除编译
- 已检查存储/* 文件夹的权限
- 在路由文件中强制使用轨道控制器的命名空间和/或完整路径
但似乎没有任何效果。
我什至检查了作曲家生成的供应商/作曲家/autoload_classmap.php文件,但我在那里找不到 TracksController 文件。
有什么线索吗?
问题在于您的$tracks = Track::latest->get();
更改为$tracks = Track::latest()->get();
,您应该已设置。
如果您使用的是 linux,文件名和路径区分大小写。假设您没有更改默认composer.json
文件中的自动加载,PHP 希望该文件位于 app'Http'Controllers'TracksController.php
.在您的问题中,您指定它位于 App'...
.
假设这不是问题中的拼写错误,您要么需要将App
目录重命名回 app
,要么需要更新composer.json
文件以使其知道从App
目录而不是app
目录自动加载:
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App''": "App/"
}
},
如果使用资源控制器,则必须在 routes/web.php 文件中声明控制器的使用,如下所示:
<?php
use App'Http'Controllers'UsersController;
...
Route::resource('users', UsersController::class);
这在这里使用 Laravel 8 工作。
我发现您必须在 laravel 8 及更高版本中的路由/web.php 文件和路由/api.php中声明使用控制器,如下所示:`
使用 Illuminate''Support''Facades''Route
使用 App''Http''Controllers''Controllername路由::get ('/', [ 控制器名称::类,'索引' ])`对于每个控制器如需更多帮助,请观看视频https://www.youtube.com/watch?v=KPRV2ctCMGI