Php composer和psr-4未找到类文件

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

在加载vagrant并在
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"
    ]
}
添加此run
composer dump autoload
后,您应该会看到添加了许多类


希望这有帮助。

我想你不需要PSR-4,只需添加
classmap

classmap
参数,例如:

"autoload": {        
    "classmap": [
        "app"
    ]
}
添加此run
composer dump autoload
后,您应该会看到添加了许多类


希望这能有所帮助。

感谢您的回复,但它也不起作用。感谢您的回复,但它也不起作用。@上面亲爱的朋友:非常感谢您的帮助和关注。再次非常感谢你们两位。您救了我一天,给了我一个很好的教训。@上面亲爱的朋友:非常感谢您的帮助和关心。再次非常感谢你们两位。你救了我一天,给了我一个很好的教训。只是一个更新。。。如果您不想执行上述操作,可以运行composer dump autoload-aJust an update。。。如果您不想执行上述操作,可以运行composer dump autoload-a