我正在为我的框架的功能制作一个composer库,但我遇到了这个问题,问题是psr-4的自动加载。
我有以下结构
├───src
├───test
└───vendor
├───composer
├───symfony
│ ├───polyfill-ctype
│ └───polyfill-mbstring
│ └───Resources
│ └───unidata
├───twig
│ └───twig
│ ├───doc
│ │ ├───filters
│ │ ├───functions
│ │ ├───tags
│ │ └───tests
│ └───src
│ ├───Cache
│ ├───Error
│ ├───Extension
│ ├───Loader
│ ├───Node
│ │ └───Expression
│ │ ├───Binary
│ │ ├───Filter
│ │ ├───Test
│ │ └───Unary
│ ├───NodeVisitor
│ ├───Profiler
│ │ ├───Dumper
│ │ ├───Node
│ │ └───NodeVisitor
│ ├───RuntimeLoader
│ ├───Sandbox
│ ├───Test
│ ├───TokenParser
│ └───Util
└───xenframe
└───hello
└───src
最后一个文件夹是MyLibrary,其中包含hello文件夹。
在hello文件夹的根目录中,我有一个composer.json
和一个src
文件夹。
composer.json
{
"name": "xenframe/hello",
"type": "library",
"license": "MIT",
"authors": [
{
"name": "XENONMC",
"email": "support@xenonmc.xyz"
}
],
"minimum-stability": "stable",
"require": {
},
"autoload": {
"psr-4": {
"hello\\": "/src"
}
}
}
src/
文件夹内是主文件-
index.php
<?php
namespace xenframe\hello;
class App {
function __construct() {
echo "object constructed";
}
}
echo "hello world was loaded";
现在,用法在我的rootindex.php
中。
index.php
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$root = str_replace('\\', '/', __DIR__);
// setup composer autoloader
require_once $root . '/vendor/autoload.php';
// visit us as https://xenonmc.xyz
use xenframe\hello\App;
$hi = new App();
o) 使用了psr-4,如下面的“xenframe\\hello”:“src/”
o)使用了类路径,我不喜欢这一个,因为psr-4是作曲家的推荐标准。
o)使用psr-0,我也没有选择这一个,因为有很多详细内容。
谢谢
在测试给定代码时,通过将src
中的index.php
重命名为与文件中类名相关的App.php
来解决问题。在psr-4
部分中也使用了"xenframe\\Hello\\":"src/"
在composer.json
中。
值得一提的是,虽然作曲家无法自动加载所需的类,但由于PSR-4不符合要求,作曲家没有报告错误。
这些问题是:
终止类名对应于以. php
结尾的文件名。文件名必须与终止类名的大小写匹配。
在psr-4
键下,您定义了相对于包根目录从命名空间到路径的映射。当自动加载一个类时,像Foo\\Bar\\Baz
命名空间前缀Foo\\
指向一个目录src/
意味着自动加载器将查找一个名为src/Bar/Baz.php
并包括它,如果存在。
我开始学习Composer,并正在开发一个系统,在该系统中,我将文件与核心应用程序文件分开,如下所示: 所以,要在composer中设置此设置。json文件并访问所有类/App much/Core会这样吗? 还是有更正确的方法? 我也读过PSR-0和PSR-4的比较,我仍然有点怀疑应该使用哪一种。在我的情况下,我应该实现什么,PSR-0还是PSR-4?
我正在使用一些phpunit测试类尝试composer autoload,但我似乎无法让它工作。当我从命令行运行phpunit时,我得到以下错误:“PHP致命错误:Class…notfound”。 我将提供所有的结构和文件信息。我可以,所以希望有人能发现我的错误。 结构(精简为相关文件): composer.json phpunit.xml 测试/功能/基本测试用例。php 测试/功能/主页测试。
其实我是新的PHP。我在一个几乎是空的文件夹中运行这个(实际上是按照劳拉-cast教程:用TDD设计一个流畅的应用编程接口)。 我的目录结构看起来像 src 表情。php 表达测试。php 内部作曲家。json: 内部表达测试。php: 内心的表达。php 然后我运行composer dump autoload并运行phpunit,但仍然得到: 我的语法有问题吗?我对作曲家的理解是非常基本的。提前
我很难理解这个简单的界面有什么问题。 当我收到下面的通知 弃用通知:./App/Interfaces/renderData.php中的类App\Interfaces\renderData不符合psr-4自动加载标准。它将不再在Composer v2.0中自动加载。 composer.json自动加载部分: 文件夹结构为: 我已经尝试将应用重命名为应用,然后转储自动加载,但问题仍然存在。
如何自动加载助手函数(在任何类之外)?我可以在应该首先加载的某种引导文件?
文件自动加载_psr4。php不包含“autoloaddev”部分的名称空间,仅包含“autoload”部分的名称空间。 当我的作曲家。json读取 然后我跑了 My/vendor/composer/autoload_prs4。php文件显示为 谢谢