【问题标题】:Composer PSR-4 for application files用于应用程序文件的 Composer PSR-4
【发布时间】:2014-09-12 05:46:56
【问题描述】:

我是使用 composer 的新手,并且在我的 composer.json 文件中创建了一个所需项目的列表。我可以在我的 index.php 引导文件中使用它们。

但是,我还希望能够使用 composers 自动加载器在供应商文件夹之外自动加载我自己的项目文件。我的文件夹结构如下:

vendor/
project/
   Project.php
index.php
composer.json

index.php

<?php

require 'vendor/autoload.php';

new \Project\Project;

Project.php

<?php

namespace Project;

class Project {
}

composer.json

{
    "autoload": {
        "psr-4": {
            "Project\\": "project"
        }
    }
}

这不断出现以下错误:

Fatal error: Class 'Product\Product' not found in index.php on line 5

我做错了什么?或者我可以不使用作曲家自动加载来加载我的应用程序文件吗?

编辑 结果我需要运行composer dump-auto -o 来刷新我对composer.json 文件所做的更改。感谢在 cmets 中发帖的 @Quasduck。

【问题讨论】:

  • 您声明的名称空间与您正在使用的名称空间之间似乎存在脱节。您确定您要实例化的类不应该是 Project\Product\Product 吗?
  • 它应该是new \Project\Project; - 没有尾随.php。并且还要确保您在 composer.json 的自动加载部分进行更改后不要忘记运行composer dump-auto -o - 您的错误消息中的Product 是从哪里来的?任何地方都涉及到 Product 类吗?
  • @Quasdunk .php 是 SO 上的错字,不在代码本身中。当我运行您建议的composer dump-auto -o 并且课程加载正常时,问题已得到解决:)
  • 好的,很高兴它现在可以工作了 :) 祝你的项目好运!
  • @Quasdunk 请将您的解决方案作为答案发布,以便 Ozzy 将问题标记为已解决。

标签: php json composer-php autoload


【解决方案1】:

发表我的评论作为答案

每当您修改 composer.json 文件中的自动加载部分时,请始终确保在此之后通过运行更新自动加载器

$ composer dump-autoload -o

这也会在每个composer updatecomposer install 之后自动运行。

还要注意(可选,但推荐)-o 参数,它告诉 Composer 优化自动加载。这基本上意味着 PSR-0/4 自动加载(如您的示例中)被转换为简单的classmaps。这可以显着加快自动加载速度,尤其是在大型项目中。

更新 autloader 也可以解决当您更新、重命名或移动类时出现的问题,但您的应用程序似乎没有意识到这一点。

【讨论】:

猜你喜欢
  • 2017-12-10
  • 1970-01-01
  • 1970-01-01
  • 2014-10-22
  • 2015-04-20
  • 1970-01-01
  • 2014-07-25
  • 1970-01-01
  • 2015-11-11
相关资源
最近更新 更多