【问题标题】:Composer autoloader作曲家自动加载器
【发布时间】:2015-09-24 05:57:00
【问题描述】:

我正在尝试学习作曲家,但我似乎无法让自动加载器与我创建的包一起工作。它只是指出找不到该类。

我做错了什么?

索引.php:

require 'vendor/composer/autoload_psr4.php';
use packageName\core\Bootstrap;
$boot = new Bootstrap();

Bootstrap.class.php(在 /vendor/vendorName/packageName/core/ 内):

namespace packageName\core;
class Bootstrap {
   ...

packageName 的composer.json:

"autoload": {
    "psr-4": { "packageName\\core\\": "/vendor/vendorName/packageName/core" }
}

【问题讨论】:

  • 只包括 vendor/autoload.php, getcomposer.org/doc/01-basic-usage.md#autoloading
  • /vendor/... 真的在您的文件系统的根级别吗?如果是相对路径而不是绝对路径,请使用"vendor/vendorName/packageName/core"
  • 它也不适用于 vendor/autoload.php。我认为它找不到文件。并且 /vendor/ 位于根级别。
  • Composer 推荐 vendor/packageName 用于库名称格式。我们将 ./vendor/autoloader.php 作为根类自动加载器。另外,请记住在更改类名/空格后运行 composer -o 以便重建类映射。接下来:use vendor/packageName/className 在 Bootstrap.class.php 的顶部。让我们知道发生了什么(请提供确切的错误消息)。
  • @Pheagey 问题其实已经解决了。这是我这边的相对/绝对路径问题(已接受的答案)。无论如何谢谢!

标签: php composer-php


【解决方案1】:

首先:不要包含随机自动加载组件。 Composer has documentation how to use the autoloader.

第二:不要在你的 OWN 自动加载中处理已经用 Composer 安装的包。 vendor 文件夹中的所有内容都不能从您自己的 composer.json 中自动加载 - 它应该提供它自己的自动加载定义。最简单的情况是你只有这个:

{
    "require": {
        "vendorName/packageName" : "^1.0"
    }
}

如果您还想自动加载自己的代码(我会推荐),您只需要add autoloading 即可。

【讨论】:

  • 我正在创建一个包。它由一些文件组成,所有这些文件都需要在启动时加载。
  • 但是如果你的包使用了其他包,这些不能出现在你自己包的自动加载中。此外,文件在开始时加载的唯一原因是它是否包含函数,因为函数不能自动加载。我认为你应该举一个更好的例子来说明你将要做什么 - 并且请添加完整的错误消息,不要解释它。
  • 我的包没有使用任何其他包。我正在测试我的包(这里称为“packageName”)是否可以在其他人安装时自动加载。我需要 bootstrap() 类在启动时运行。
  • 引导类在做什么?根据 PSR 标准,文件不应该在声明新符号(类、函数、常量)的同时引起副作用。如果您将文件设置为 "files" 自动加载器,Composer 将允许运行文件,但强制对包的每个用户进行引导应该是慎重的决定 - 我不喜欢它并怀疑有更好的方法来做到这一点。跨度>
  • 是的,我几乎可以肯定有更好的方法来做到这一点。该包假设是一个 MVC 引擎,具有引导程序以获取请求 URI(即 site.com/Controller/method)并运行正确的控制器。但是我创建了一个自定义的 include.php,其中包含正确的文件而不是运行自动加载,直到我阅读并真正理解整个包/作曲家交易。无论如何,谢谢,斯文!
【解决方案2】:

Mark Ba​​ker 的回答(在上面的 cmets 中)解决了这个问题。

“/vendor/... 真的在文件系统的根级别吗?如果它是相对路径而不是绝对路径,请使用“vendor/vendorName/packageName/core”

【讨论】:

    猜你喜欢
    • 2013-12-09
    • 2013-03-05
    • 2018-06-15
    • 2016-07-08
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    相关资源
    最近更新 更多