Laravel路由文件找不到控制器


Laravel routes file cannot find Controllers

我有一个非常简单的路由.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