PHP Composer Autoloader 结构简单

PHP Composer Autoloader Simple Structure

我有 Composer 工作,我想使用它的自动加载器来加载我的 classes,但它不工作。这是我的目录结构。我从一开始就非常简单。

index.php
composer.json
Vendor
controllers/webgl.php

里面 webgl.php 我有:

namespace controllers;

class webgl {
    public function lesson1() {

    }
}

在 index.php 我有:

require('vendor/autoload.php');
//require_once('controllers/webgl.php');

$webglController = new \controllers\webgl;

我的 composer.json 为自动加载定义了这个:

"autoload": { 
    "psr-4": { 
        "controllers\": "controllers/" 
    } 
}

如果我取消注释第二个要求,脚本就会运行,否则我会得到 "Fatal error: Class 'controllers\webgl' not found in /vagrant/index.php on line 5".

我认为文件夹结构、class命名空间和class名称都符合psr-4。但我一定是误会了什么。我读过很多类似的问题,但 none 已经能够帮我解决问题。

谁能告诉我为什么我的 class 没有加载以及我应该如何解决它?

你定义了一个autoload directive吗?

您需要将此添加到您的 composer.json 文件中:

"autoload": {
    "psr-4": {
        "controllers\": "controllers/"
    }
}

将自动装带器指向正确的方向,然后 运行

composer update  

从项目目录中的终端。现在 class 将加载而无需明确要求其文件。

确保 运行 在更改 composer.json 后至少 composer dump-autoloadcomposer installcomposer update 也会这样做。

从您的问题和评论看来,您在为自己的代码添加自动加载定义后似乎没有运行命令。