Php composer和psr-4未找到类文件
在加载vagrant并在Php composer和psr-4未找到类文件,php,composer-php,autoload,Php,Composer Php,Autoload,在加载vagrant并在Homestead中设置和测试所有变量后,我很难理解如何通过psr-4使用自动加载。yaml我准备了如下文件结构: \app \folder -- test.php \vendor \composer -- autoload.php -- index.php -- composer.json 下面是我的代码: index.php <?PHP namespace app; require('vend
Homestead中设置和测试所有变量后,我很难理解如何通过psr-4
使用自动加载。yaml
我准备了如下文件结构:\app
\folder
-- test.php
\vendor
\composer
-- autoload.php
-- index.php
-- composer.json
下面是我的代码:index.php
<?PHP
namespace app;
require('vendor/autoload.php');
$object = new folder\test();
<?php
namespace app\folder;
class test
{
function __construct ()
{
echo 'construction done right.';
}
}
test.php
<?PHP
namespace app;
require('vendor/autoload.php');
$object = new folder\test();
<?php
namespace app\folder;
class test
{
function __construct ()
{
echo 'construction done right.';
}
}
在composer.json中尝试设置
"autoload":{
"psr-4":{
"": "src/"
}
}
然后执行这个命令
composer dump-autoload -o
在composer.json中,尝试设置
"autoload":{
"psr-4":{
"": "src/"
}
}
然后执行这个命令
composer dump-autoload -o
它不起作用,因为您告诉Composer来自
app
命名空间的类位于app
子目录中,但没有app
子目录
整个应用程序存储在app
目录中,它的名称对应用程序来说并不重要。app
命名空间的类存储在当前目录中,子命名空间存储在具有相同名称的子目录中
因此,您的composer.json
文件应为:
"autoload": {
"psr-4": {
"app\\": ""
}
}
或者,更清楚地说,您可以将
(当前目录)作为app\
命名空间的位置:
"autoload": {
"psr-4": {
"app\\": "."
}
}
进行更改后,在主应用程序目录中运行
composer dump autoloader
,它将开始工作。它不工作,因为您告诉composer,来自app
命名空间的类位于app
子目录中,但没有app
子目录
整个应用程序存储在app
目录中,它的名称对应用程序来说并不重要。app
命名空间的类存储在当前目录中,子命名空间存储在具有相同名称的子目录中
因此,您的composer.json
文件应为:
"autoload": {
"psr-4": {
"app\\": ""
}
}
或者,更清楚地说,您可以将
(当前目录)作为app\
命名空间的位置:
"autoload": {
"psr-4": {
"app\\": "."
}
}
进行更改后,请在主应用程序目录中运行composer dump autoloader,它将开始工作。要为当前设置修复它,请使用以下命令:
"autoload":{
"psr-4":{
"app\\": ""
}
}
\app
\src
\folder
-- test.php
-- index.php
\vendor
\composer
-- autoload.php
-- index.php
-- composer.json
"autoload":{
"psr-4":{
"app\\": "src"
}
}
您的composer.json
位于app目录中,因此没有名为app的子目录可供引用
实际上,我建议您将目录结构更改为以下内容:
"autoload":{
"psr-4":{
"app\\": ""
}
}
\app
\src
\folder
-- test.php
-- index.php
\vendor
\composer
-- autoload.php
-- index.php
-- composer.json
"autoload":{
"psr-4":{
"app\\": "src"
}
}
然后在composer.json中设置以下内容:
"autoload":{
"psr-4":{
"app\\": ""
}
}
\app
\src
\folder
-- test.php
-- index.php
\vendor
\composer
-- autoload.php
-- index.php
-- composer.json
"autoload":{
"psr-4":{
"app\\": "src"
}
}
这确保属于“应用程序”命名空间的所有文件都包含在单个子目录中
最后,我建议您使用供应商名称空间来防止冲突,并使用PSR-2中的命名指南。要为当前设置修复此名称空间,请使用以下内容:
"autoload":{
"psr-4":{
"app\\": ""
}
}
\app
\src
\folder
-- test.php
-- index.php
\vendor
\composer
-- autoload.php
-- index.php
-- composer.json
"autoload":{
"psr-4":{
"app\\": "src"
}
}
您的composer.json
位于app目录中,因此没有名为app的子目录可供引用
实际上,我建议您将目录结构更改为以下内容:
"autoload":{
"psr-4":{
"app\\": ""
}
}
\app
\src
\folder
-- test.php
-- index.php
\vendor
\composer
-- autoload.php
-- index.php
-- composer.json
"autoload":{
"psr-4":{
"app\\": "src"
}
}
然后在composer.json中设置以下内容:
"autoload":{
"psr-4":{
"app\\": ""
}
}
\app
\src
\folder
-- test.php
-- index.php
\vendor
\composer
-- autoload.php
-- index.php
-- composer.json
"autoload":{
"psr-4":{
"app\\": "src"
}
}
这确保属于“应用程序”命名空间的所有文件都包含在单个子目录中
最后,我建议您使用供应商名称空间来防止冲突,并使用PSR-2中的命名指南。我认为您不需要PSR-4,只需添加
类映射即可
classmap
参数,例如:
"autoload": {
"classmap": [
"app"
]
}
添加此runcomposer dump autoload
后,您应该会看到添加了许多类
希望这有帮助。我想你不需要PSR-4,只需添加classmap
classmap
参数,例如:
"autoload": {
"classmap": [
"app"
]
}
添加此runcomposer dump autoload
后,您应该会看到添加了许多类
希望这能有所帮助。感谢您的回复,但它也不起作用。感谢您的回复,但它也不起作用。@上面亲爱的朋友:非常感谢您的帮助和关注。再次非常感谢你们两位。您救了我一天,给了我一个很好的教训。@上面亲爱的朋友:非常感谢您的帮助和关心。再次非常感谢你们两位。你救了我一天,给了我一个很好的教训。只是一个更新。。。如果您不想执行上述操作,可以运行composer dump autoload-aJust an update。。。如果您不想执行上述操作,可以运行composer dump autoload-a