Composer psr-4自动加载问题

时间:2018-02-14 19:55:12

标签: php namespaces autoload psr-4

当我使用psr-4自动加载时,我有使用composer自动加载的问题它不起作用并给我错误。

我试过了:

$ 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/"
    }
  }
}

greeting.php(要加载的类的文件):

<?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();

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

通常优良做法是将类名的第一个字母大写。它还遵守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 One\Greeting;

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

答案 2 :(得分:1)

我发现了问题,遗失了:

use One\Greeting; 

在很多教程中都没有关于它的说法。

答案 3 :(得分:0)

在我的情况下,文件名是

src/One/GreetingClass.php

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

class Greetingclass {

将类声明更改为GreetingClass可以解决此问题。