自动加载器冲突,无法打开流

时间:2017-05-11 09:46:54

标签: php laravel class autoload autoloader

我在控制器文件中编写自动加载器以加载类文件。这个加载类在services文件夹中很好。但是当加载类不在services文件夹中时,它会导致此问题。

  

[2017-05-11 17:38:23] production.ERROR:异常'ErrorException'   消息'include(/var/www/market/app/services/ProductDomain.php):   无法打开流:没有这样的文件或目录   /var/www/market/app/controllers/CloudController.php:27

public function __construct()
{
    spl_autoload_register(function($classname) {
        include app_path() . '/services/' . $classname . '.php';
    });
}

这可能是由于与其他自动加载器混淆造成的,可能是laravel的自动加载器。我想知道如何让我的自动加载器只加载services文件夹下的类文件,剩下的其他类文件将由laravel framework的自动加载器加载。

如何解决这个问题。提前谢谢。

2 个答案:

答案 0 :(得分:1)

如果文件实际存在,并且您拥有正确的权限(您可以执行chmod 777进行测试)请尝试composer install,然后在该作曲家dump-autoload -o

之后

答案 1 :(得分:0)

我通过检查文件是否存在来解决这个问题。自动加载器有加载顺序。

manual

  

如果必须有多个自动加载功能,spl_autoload_register()   允许这样做。它有效地创建了自动加载功能队列,   并按照定义的顺序遍历每一个。通过   相比之下,__ autoload()只能定义一次。

public function __construct()
{
    spl_autoload_register(function($classname) {
        if(file_exists(app_path() . '/services/' . $classname . '.php'))
            include app_path() . '/services/' . $classname . '.php';
    });
}

所以我定义的自动加载器会在laravel framework的自动加载器之前加载php类。