【问题标题】:Unable to AutoLoad Class using Composer无法使用 Composer 自动加载类
【发布时间】:2013-02-17 05:03:55
【问题描述】:

我的项目结构如下:

app/
app/models/
app/controllers/
app/views/
public/
vendor/
composer.json

在 app/controllers/IndexController.php 里面,我有:

require '../vendor/autoload.php';

use MyApp\Models\Test;

class IndexController {

    public function __construct() {
       $t = new Test(); // can't be found
    }
}

这是我的 composer.json:

{
  "require": {
    "aws/aws-sdk-php": "*",
  },
  "autoload": {
    "psr-0": {
        "MyApp": "app/"
    }
  }
}

更新 composer.json 后,我运行 composer.phar update 来更新生成的自动加载文件。

仅供参考 - 我没有使用任何类型的 MVC 框架。这只是我喜欢用于小型项目的自定义轻量级结构。

如何修复我的项目,以便我可以从我的模型文件夹中自动加载类并在我的控制器中正确使用它们?

【问题讨论】:

    标签: autoload composer-php


    【解决方案1】:

    如果您使用psr-0 自动加载,那么您需要遵循 psr-0 规范。这意味着,如果您指定 "MyApp": "app/",则 MyApp\Models\Test 类必须在 app/MyApp/Models/Test.php 中。

    【讨论】:

    • 假设我想摆脱 psr-0,只需修改我的 composer.json 以使其与我现有的文件夹结构一起工作。我该怎么做?
    • 使用 classmap 自动加载,支持任何东西。 "autoload": { "classmap": [ "app/" ] } 将扫描整个 app 目录中的 .php/.inc 文件,并找到任何定义的所有类。但是,开发包本身不太方便,因为当您添加一个新类时,您应该再次运行 composer dump-autoload 以使其发现它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 2015-09-08
    • 2016-04-17
    • 2012-09-30
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    相关资源
    最近更新 更多