【问题标题】:Composer psr-4 autoload issueComposer psr-4 自动加载问题
【发布时间】:2018-07-25 11:57:21
【问题描述】:

当我使用 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();

【问题讨论】:

    标签: php namespaces autoload psr-4


    【解决方案1】:

    将类名的第一个字母大写通常是一种很好的做法。它还遵守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】:

    我发现了问题,有遗漏:

    use One\Greeting; 
    

    在很多教程中都没有提到它。

    【讨论】:

    • 我在最后一行中确实提到了这一点。但我很高兴你找到它!
    【解决方案3】:

    另一个相关细节是命名空间必须与文件夹结构匹配。 如果不是,它会抛出警告。

    【讨论】:

    • 这还包括区分大小写的文件夹命名。我已经搜索了 2 天的错误以修复它。哇靠。有趣的是,它是由一个错字引起的。
    【解决方案4】:

    在我的例子中,文件名是

    src/One/GreetingClass.php
    

    但是类名是小写的,导致这个错误:

    class Greetingclass {
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-24
      • 2014-07-25
      • 2015-04-20
      • 2014-08-12
      • 2014-11-01
      • 2018-06-01
      • 2017-02-01
      • 2017-09-15
      相关资源
      最近更新 更多