使用作曲家自定义类自动加载

时间:2019-06-24 15:14:27

标签: composer-php autoloader

我是作曲者的新手,可以管理自定义类的加载。我正在尝试向自动加载中添加一些自定义类,但没有成功,我将总是遇到Class not found...错误。

我将如何正确设置作曲器,在哪里将composer.json文件与有关自定义类的psr-4信息一起放置?

有人可以帮助我了解在这种情况下它将如何工作吗? 这是我的课程代码段,我使用了一些作曲家程序包,因此需要自动加载它们。该文件放置在其自己的目录中。结构如下:project_root\assets\library\MyClassFolder

<?php
namespace MyNamespace;

require_once __DIR__.'/vendor/autoload.php';

use \Foo\Bar;

class MyClass {
 ...
}

?>

这是需要加载类的代码。此文件位于我的项目根文件夹内,并导致错误:

<?php

require_once __DIR__.'/vendor/autoload.php';

use \MyNamespace\MyClass;

if( isset($_POST['do_action']) ){
MyClass::init();
}
?>

这是项目根目录中的composer.json文件:

{
    "require": {
        "gabordemooij/redbean": "^5.3"
    },
    "autoload": {
      "psr-4": {
        "MyNamespace\\": "assets/library/"
      }
    }
}

1 个答案:

答案 0 :(得分:0)

我找到了一个修复程序,在composer.json文件中犯了一个错误。我没有将名称空间指向classes目录。这就是为什么我遇到Class not found...错误。

编辑器文件现在看起来像这样:

{
    "require": {
        "gabordemooij/redbean": "^5.3"
    },
    "autoload": {
      "psr-4": {
        "MyNamespace\\": "assets/library/MyClassFolder/"
      }
    }
}

我还需要更改自定义类文件中的require_once,以指向自动加载文件所在的供应商路径。

代替 require_once __DIR__.'/vendor/autoload.php'

现在我已经

require_once dirname(__DIR__, 3).'/vendor/autoload.php' 这是因为