作曲家 PSR4 奇怪的行为
Posted
技术标签:
【中文标题】作曲家 PSR4 奇怪的行为【英文标题】:Composer PSR4 weird behavior 【发布时间】:2016-04-13 18:53:56 【问题描述】:不久前,我创建了一个树枝扩展。最近我添加了一个命名空间,以便我可以更轻松地与 composer 一起使用它。我已经这样做了几次,它适用于其他文件/类。
问题在于,如果我在 composer 中更新或转储自动加载时使用 -o 选项(优化),它只会正确自动加载。
因此,例如,如果我运行composer dumpautoload -o
,我的班级就没有问题。如果我运行composer dumpautoload
,它将不起作用并给我以下错误:
Fatal error: Class 'Crecket\custom_twig_extension' not found in C:\Dropbox\Ampps\www\crecket.dev\index.php on line 24
我的扩展类:
namespace Crecket;
class custom_twig_extension extends \Twig_Extension
// The code
我的作曲家文件
"autoload":
"psr-4":
"Crecket\\": "src/"
文件夹结构
src/custom_twig_extension.php
有人知道这是什么原因吗?我似乎无法弄清楚是什么原因造成的。我猜这与作曲家在使用优化时创建类图有关。
【问题讨论】:
您的设置对我来说效果很好。检查几件事。确保您需要来自index.php
的vendor/autoload.php
。还要检查每个命令后的vendor/composer/autoload_classmap.php
和vendor/composer/autoload_psr4.php
,看看是否能给你任何见解。
@JustinHoward 该类在 psr4.php 文件中可见,但我使用get_declared_classes()
签入了我的 index.php 文件,但未在其中列出。我现在真的很无知。我什至尝试添加/删除额外的命名空间和更改文件夹
我也有同样的问题.. 仍然不知道为什么或如何解决它
【参考方案1】:
我遇到了类似的问题,原来是因为我的文件中的类名与提供它的文件名不同。我有 myclass.php 和 class MyClass
根据 reddit 关于某人遇到类似问题的讨论 (https://www.reddit.com/r/laravel/comments/2zx3in/l5_composer_dumpautoload_gives_class_not_found/):
在 PSR-4 中,您必须将文件命名为类的名称。
当我将 myclass.php 重命名为 MyClass.php 时,问题消失了 - 仔细检查您是否使用了相同的名称(和大小写!)!
【讨论】:
以上是关于作曲家 PSR4 奇怪的行为的主要内容,如果未能解决你的问题,请参考以下文章