作曲家PSR-4自动加载问题



我在使用PSR-4自动加载时与作曲家自动加载有问题,它不起作用并给我错误。

我尝试了:

$ 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/"
    }
  }
}
<?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();

通常将班级名称的第一个字母大写通常是一个好习惯。它还遵守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 OneGreeting;

$greeting = new Greeting();
echo $greeting->hi(); //"We got you covered"

我发现了问题,缺少:

use OneGreeting; 

在许多教程中,没有一个字。

有关此的另一个相关细节是名称空间必须与文件夹结构匹配。如果没有,它将发出警告。

在我的情况下,文件名为

src/One/GreetingClass.php

但是类名称为小写,导致此错误:

class Greetingclass {

将类声明更改为engreingClass解决了问题。

最新更新