【问题标题】:Laravel Class Controller not found because route is weirdly case sensitive找不到 Laravel 类控制器,因为路由非常区分大小写
【发布时间】:2023-03-11 07:05:01
【问题描述】:

我想将控制器添加到我已经存在的项目中。写了一个控制器文件,在 admin_api 路由文件中添加了链接,并调整了我需要的视图。

在我的本地机器上一切正常。

在生产时它失败了(它应该检索一个集合,然后由 vue js 组件处理和显示)并且网络监视器显示错误 500。

我 ssh 进入网站并运行 php artisan route:list,这给了我错误

In Container.php line 779:

  Class App\Http\Controllers\Admin\Api\StatsController does not exist

虽然文件 StatsController 位于 App\Http\Controllers\Admin\API\

玩了之后,我意识到问题出在文件夹名称“API”上,因为 laravel 正在寻找“Api”。所以显然它是区分大小写的。 将控制器放在新文件夹“Api”中解决了这个问题。 将所有其他“API”控制器移动到“Api”会破坏它们的路由。 运行 php artisan route:list 和 RouteServiceProvider 时,所有路由都显示为 Admin/Api 下。

我不明白这是在哪里注册的?有没有办法改变这个? 我发现控制器现在位于单独的文件夹中很烦人,这对我来说似乎很荒谬。如果原始控制器似乎与其他配置相矛盾,我不太了解它们是如何工作的。

使用 Laravel 5.7

如果有任何见解,我将不胜感激!

谢谢

【问题讨论】:

  • 如果您在不区分大小写的平台 (Windows) 上进行开发,但部署到区分大小写的平台(实际上是其他任何平台)上,您将会遇到 Bad Time™。不要有两个单独的文件夹。选择一种一致的方式来利用和标准化它。
  • 检查 StatsController 的命名空间并确保它的大小写与其他的一致。你也可以发布导致这个问题的路由 sn-p 吗?
  • @ceejayoz 啊,好吧,这解释了问题的根源。尽管我觉得奇怪的是原始类都可以正常工作,尽管它们的案例是错误的(目录是 API 和 namspace Api)
  • @Wolfie 就像我说的那样,这将在 Windows 上发生,因为文件系统不区分大小写。当您部署到不是 Windows 的东西时,它会中断。
  • @ceejayoz 我明白了。我的意思是大多数类在几个月前最初部署时正确部署,尽管在纸面上它们应该也坏了。几天前才出现这个问题的新课程。

标签: laravel


【解决方案1】:

只需将所有相关的 api 控制器放在一个名为 Api 或 API 的文件夹中(只需选择一个约定并坚持下去),然后确保每个文件的命名空间(在顶部声明)正确并反映您选择的文件夹结构。

例如,如果您的控制器位于 app/Http/Controllers/Admin/Api 中,请检查每个控制器文件是否以:

<?php

namespace App\Http\Controllers\Admin\Api;

// Rest of code...

【讨论】:

    【解决方案2】:

    StatsController.php 的命名空间必须为 App\Http\Controllers\Admin\API。在Controller.php 中,您必须导入为App\Http\Controllers\Admin\API\StatsController。之后,运行composer dump-autoload

    【讨论】:

    • 非常感谢,composer dump-autoload 是我错过的步骤!
    猜你喜欢
    • 2014-03-10
    • 2016-11-24
    • 2020-01-26
    • 2022-07-22
    • 1970-01-01
    • 2016-11-19
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多