我正在开发一个使用Monolog的项目,需要Psr/log。当我通过自动加载使用Monolog时,它会抱怨缺少Psr\Log\LoggerInterface。所以我查看作曲家生成的autoload_namespaces.php,我找不到注册的Psr。
这是我的供应商/autoload_namespaces.php的内容
return array(
'Symfony\\Component\\Process' => $vendorDir . '/symfony/process/',
'Monolog' => $vendorDir . '/monolog/monolog/src/',
'Imagine' => $vendorDir . '/imagine/Imagine/lib/',
'Gedmo' => $vendorDir . '/gedmo/doctrine-extensions/lib/',
'Gaufrette' => $vendorDir . '/knplabs/gaufrette/src/',
'Evenement' => $vendorDir . '/evenement/evenement/src',
'Doctrine\\ORM' => $vendorDir . '/doctrine/orm/lib/',
'Doctrine\\DBAL' => $vendorDir . '/doctrine/dbal/lib/',
'Doctrine\\Common' => $vendorDir . '/doctrine/common/lib/',
'Assetic' => $vendorDir . '/kriswallsmith/assetic/src/',
'Analog' => $vendorDir . '/analog/analog/lib/',
);
作曲家是否应该为composer.json文件中定义了{autoload}的所有项目注册名称空间?(我检查了Monolog和Psr/Log,它们都定义了{autoload}。)
还是我对作曲家有误解?
Composer基于项目的Composer中的
文件,例如。自动加载
注册类。json
{
"autoload": {
"classmap": [
"path/to/FirstClass.php",
"path/to/SecondClass.php"
]
}
}
通常composer update
将自动重新生成自动加载的\u名称空间。php
列出了应用程序可以使用的所有名称空间(除非您使用多个自动加载程序)。
如果缺少命名空间,下面是直接更新作曲家自动加载器的命令:
composer dump-autoload -o
然后,您需要确保在我们的脚本顶部包含自动加载器:
<?php
require_once __DIR__ . '/vendor/autoload.php';
请参阅:如何使用Composer直接自动加载类?
如果仍然失败,请仔细检查失败项目的编写器中的语法。json
文件(特别是自动加载
部分)。要调试,请尝试使用-vvv
或在XDebug下运行composer。
我实际上被autoload_namespaces.php的数量弄糊涂了。我在我的问题中发布的是在供应商/
中,然后我在供应商/。作曲家/
中找到了另一个,最后在供应商/作曲家/
中找到了正确的。
很抱歉回答了我自己的(愚蠢的)问题,但值得一提的是,以防其他开发人员也遇到同样的问题。
并且感谢@川妈的回答。
您需要显式地添加
"psr/log": "1.0.0"
在你的作曲家。json需要块。项目monolog/monolog
不需要psr/log
[您可以在monolog的composer.json文件中验证这一点]。
然后运行作曲家更新来更新自动加载器文件。
[更新]犯了一个错误。
我使用的是独白1.2。*而且它不需要psr/log
。在独白1.3*之后,它确实需要psr/log
。在这种情况下,composer应该在vendor/autoload_名称空间中加载psr/log
名称空间。php。
例如,我刚刚更新了我的作曲家。json应该有
"monolog/monolog": "1.3.*",
在require块中。然后运行composer update monolog/monolog
[您可以再次运行此命令,查看它是否解决了您的问题]
Loading composer repositories with package information
Updating dependencies (including require-dev)
- Installing psr/log (1.0.0)
Loading from cache
- Removing monolog/monolog (1.2.1)
- Installing monolog/monolog (1.3.1)
Downloading: connection...
Downloading: 100%
然后在我的供应商/作曲家/autoload_namespaces.php中,我找到了这个合适的条目:
'Psr\\Log\\' => $vendorDir . '/psr/log',
这应该行得通。有时候我也只是跑步
composer dump-autoload
重新生成供应商/编写器/自动加载_名称空间。php文件。
我刚刚开始使用composer进行依赖关系管理,我很难弄清楚我是如何不遵守psr-4进行自动加载的,所以我来这里寻求建议。我有一个生成随机值的类,它已经在packagist上了。项目结构如下(我已将composer.json文件标记为A和B): 项目总监 composer.jsonA composer.jsonB 最后是RlandValue.php文件,它声明了ejFrancis命名空间 当我运行
我不熟悉使用composer和psr-0。我尝试了一个使用composer和psr-0的小应用程序。我已经使用名称空间加载了一个特定的类。当我使用composer vendor/autoload调用一个类时,我得到了“未找到类”错误。 我的composer.json文件:/var/www/html/silexapp/composer.json 我的作曲家供应商自动加载文件:/var/www/htm
我试图使用高斯,但我得到以下致命错误: 致命错误:类GuzzleHttp\ClientInterface在第13行的 /var/www/myapp/vendor/guzzlehttp/guzzle/src/functions.php中找不到 我正在使用composer autoloader自动加载: 发生了什么事? 编辑 我的composer.json: 编辑2 我的作曲家。锁 编辑3 编写器配置
我遇到了使用作曲家psr-4自动加载功能和PHPUnit的问题。问题发生在我的本地机器以及TravisCI版本上。单元测试无法找到我的类,而普通脚本可以找到。 当然,任何配置都有问题,但我无法找出我做错了什么。提前感谢你的帮助。 这是我的项目文件结构: 公共/ src/ http/ urlhelper。php 小黑 超文本传输协议/ urlhelper.test.php 这是我的作曲家的作品。js
问题内容: 当我尝试使用自动加载和命名空间时出现此错误: 致命错误:* 在 第10行的 /usr/local/www/apache22/data/public/php5.3/test.php中 找不到类’Class1’ * 谁能告诉我我在做什么错? 这是我的代码: Class1.php: test.php: 问题答案: Class1不在全局范围内。 请参见下面的工作示例: 编辑(2009-12-1
例如,一个XML属性值是,但名称空间前缀“repository”从未在数据集中定义。(不要紧,提供商的最佳实践建议定义它!) 所以当我去解封一个示例集时,具有指定前缀的QName属性(在我上面的示例中为“Repository”)是空的!所以看起来JAXB正在“抛出”那些具有未定义名称空间前缀的属性QName值。我很惊讶,它甚至没有保留当地的名字。 理想情况下,我希望保持该值原样,但看起来我无法在绑