Composer psr-4 自动加载问题
Posted
技术标签:
【中文标题】Composer psr-4 自动加载问题【英文标题】:Composer psr-4 autoload issue 【发布时间】:2018-07-25 11:57:21 【问题描述】:当我使用 psr-4 自动加载时,我遇到了 composer 自动加载的问题,它不起作用并给我错误。
我试过了:
$ composer dump-autoload
还有很多其他的东西,但是没有
require one;
错误:
You are now a master builder, that knows how to autoload with a
classmap!
Fatal error: Uncaught Error: Class 'VegithemesLibraryGreeting' not
found in /home/vaclav/Server/vssk/VSSK/project/aldemo/index.php:10
Stack trace: #0 main thrown in
/home/vaclav/Server/vssk/VSSK/project/aldemo/index.php on line 10
composer.json:
"autoload":
"files": ["mylibrary/functions.php"],
"classmap": [
"classmap"
],
"psr-4":
"one\\": "src/"
greeting.php(要加载的类文件):
<?php
namespace one;
Class Greeting
public function hi()
return "We got you covered";
index.php 文件:
<?php
require 'vendor/autoload.php';
echo lego();
$cm = new Cmautoload;
echo $cm->classmap();
$vt = new oneGreeting;
echo $vt->hi();
【问题讨论】:
【参考方案1】:将类名的第一个字母大写通常是一种很好的做法。它还遵守PSR-1的规则。
将您的 composer.json 文件更改为如下所示:
"autoload":
"files": [
"mylibrary/functions.php"
],
"classmap": [
"classmap"
],
"psr-4":
"One\\": "src/"
现在,在您的索引文件中。我们将导入自动加载器。要做到这一点,只需要它:
require 'vendor/autoload.php';
现在您已经包含了自动加载器,进入每个类并设置命名空间。
src/
== namespace One;
中的类
检查src/
中的类并确保它们都已命名空间。这意味着它们都应该在顶部具有以下代码行:
namespace One;
如前所述,将文件名更新为 Foo.php
并将类名更新为
class Foo
遵守 PSR。 (这不是必需的,但强烈推荐和标准程序。)
要使用你的课程,你会说use One\Greeting;
$greeting = new Greeting();
echo $greeting->hi(); //"We got you covered"
【讨论】:
我什么都做了,还是一样。【参考方案2】:我发现了问题,有遗漏:
use One\Greeting;
在很多教程中都没有提到它。
【讨论】:
我在最后一行中确实提到了这一点。但我很高兴你找到它!【参考方案3】:另一个相关细节是命名空间必须与文件夹结构匹配。 如果不是,它会抛出警告。
【讨论】:
这还包括区分大小写的文件夹命名。我已经搜索了 2 天的错误以修复它。哇靠。有趣的是,它是由一个错字引起的。【参考方案4】:在我的例子中,文件名是
src/One/GreetingClass.php
但是类名是小写的,导致这个错误:
class Greetingclass
将类声明更改为 GreetingClass 解决了该问题。
【讨论】:
以上是关于Composer psr-4 自动加载问题的主要内容,如果未能解决你的问题,请参考以下文章
使用PSR-4配合composer autoload 自动加载文件夹