[英]Class file not found by composer and psr-4
我很难理解如何通过psr-4
使用自动加载。
在加载 vagrant 并在Homestead.yaml
设置和测试所有变量后,我准备了一个文件结构如下:
\app
\folder
-- test.php
\vendor
\composer
-- autoload.php
-- index.php
-- composer.json
以下是我的代码:
索引.php
<?PHP
namespace app;
require('vendor/autoload.php');
$object = new folder\test();
作曲家.json
"autoload":{
"psr-4":{
"app\\": "app"
}
}
测试文件
<?php
namespace app\folder;
class test
{
function __construct ()
{
echo 'construction done right.';
}
}
但是,在尝试访问该页面后,这些是页面上显示的错误消息:
(!) 致命错误:未捕获的错误:在第 6 行的 /home/vagrant/web/sites/app/index.php 中找不到 Class 'app\\folder\\test'
( ! ) 错误:在第 6 行的 /home/vagrant/web/sites/app/index.php 中找不到“app\\folder\\test”类
你能帮我理解并修复这个错误吗?
要针对您当前的设置修复它,请使用以下命令:
"autoload":{
"psr-4":{
"app\\": ""
}
}
您的composer.json
位于 app 目录中,因此没有名为 app 的子目录可供引用。
我实际上建议将您的目录结构更改为以下内容:
\app
\src
\folder
-- test.php
-- index.php
\vendor
\composer
-- autoload.php
-- index.php
-- composer.json
然后在 composer.json 中,设置以下内容:
"autoload":{
"psr-4":{
"app\\": "src"
}
}
这可确保属于您的“app”命名空间的所有文件都包含在单个子目录中。
最后,我建议您使用供应商命名空间来防止冲突,并使用 PSR-2 中的命名指南。
它不起作用,因为您已经告诉 Composer 来自app
命名空间的类在app
子目录中,但没有app
子目录。
整个应用程序存储在app
目录中,它的名称对应用程序来说并不重要。 app
命名空间的类存储在当前目录中,子命名空间存储在同名的子目录中。
因此,您的composer.json
文件应为:
"autoload": {
"psr-4": {
"app\\": ""
}
}
或者,更清楚地说,您可以将.
(当前目录)作为app\\
命名空间的位置:
"autoload": {
"psr-4": {
"app\\": "."
}
}
进行更改后,在主应用程序目录中运行composer dump-autoloader
它将开始工作。
我认为您不需要 PSR-4 只需添加classmap
classmap
参数例如:
"autoload": {
"classmap": [
"app"
]
}
添加此运行composer dump-autoload
,您应该会看到添加了许多类。
希望这会有所帮助。
在 composer.json 中尝试设置
"autoload":{
"psr-4":{
"": "src/"
}
}
然后执行此命令
composer dump-autoload -o
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.