Composer psr-4 自动加载在部署后不起作用

Luu*_*ter 3 php autoload composer-php psr-4

我有我自己的小 MVC 框架,我使用 composer psr-4 自动加载。

在我自己的计算机上它运行得非常好,但是当我将它部署到我的 Ubuntu 服务器时它不再工作了。(它不再找到任何课程)我尝试了很多东西,但无论我尝试什么都行不通......

我尝试过的:

  • 作曲家转储自动加载
  • 作曲家更新
  • 删除所有内容并重新上传
  • 在互联网上搜索了几个小时...... :(

这是我的 composer.json:

{
  "autoload": {
    "psr-4": {
      "App\\": "app",
      "Core\\": "core",
      "Magister\\": "vendor/Magister"
    }
  },
  "require": {
    "philo/laravel-blade": "^3.1"
  }
}
Run Code Online (Sandbox Code Playgroud)

我只是不明白为什么它在我的服务器上不起作用......我在我的服务器上使用其他版本的 php:7.1,我在我的电脑上使用 5.6,但这应该没有任何区别对?

我该如何解决这个问题?我只是不明白为什么会发生....:(

编辑:

我的代码:

索引.php:

<?php

require "core/app.php";

$app = new \Core\App();

echo $app->start();
Run Code Online (Sandbox Code Playgroud)

应用程序.php:

<?php

namespace Core;

require "./vendor/autoload.php";

class App
{

    function start()
    {
        ini_set('display_errors', 1);
        ini_set('display_startup_errors', 1);
        error_reporting(E_ALL ^ E_DEPRECATED);

        $MC = new Routing();
        // This is where it fails. Get the error: "class Core\Routing not found"
Run Code Online (Sandbox Code Playgroud)

路由.php:

<?php

namespace Core;

Use App\routes;

class Routing
{
    private $parameters = [];

    public function GetMC($Getroute){
    }

}
Run Code Online (Sandbox Code Playgroud)

服务器上的文件结构:

在此处输入图片说明

我已经从树中排除了供应商地图

Luu*_*ter 5

好吧……我已经修好了。

我已将我的 composer.json 更改为:

{
  "autoload": {
    "psr-4": {
      "App\\": "app/",
      "Core\\": "core/",
      "Magister\\": "vendor/Magister/"
    },
    "classmap": [
      "app/",
      "core/",
      "vendor/Magister/"
    ]
  },
  "require": {
    "philo/laravel-blade": "^3.1"
  }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

如果你想使用 psr-4 你需要将你的目录大写

app
- Modules
- Controllers
- Views
-- Layouts
...
Run Code Online (Sandbox Code Playgroud)

请参阅这篇文章了解自动加载不起作用的原因。

  • 谢谢@sumner - 这也让我感到困惑。我的框架在 MacOS 上运行良好(它似乎不太关心文件系统中的大小写敏感性),但您的大写目录名称解决方案在 Amazon Linux 2 上为我解决了这个问题。 (2认同)