Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 自动加载程序冲突,无法打开流_Php_Laravel_Class_Autoload_Autoloader - Fatal编程技术网

Php 自动加载程序冲突,无法打开流

Php 自动加载程序冲突,无法打开流,php,laravel,class,autoload,autoloader,Php,Laravel,Class,Autoload,Autoloader,我在控制器文件中写入autoloader以加载类文件。这个加载类可以很好地保存在services文件夹中。但当加载类不在服务文件夹中时,会导致此问题 [2017-05-11 17:38:23]生产。错误:异常“ErrorException” 带有消息“include”(/var/www/market/app/services/ProductDomain.php): 无法打开流:中没有这样的文件或目录 /var/www/market/app/controllers/CloudController.

我在控制器文件中写入autoloader以加载类文件。这个加载类可以很好地保存在services文件夹中。但当加载类不在服务文件夹中时,会导致此问题

[2017-05-11 17:38:23]生产。错误:异常“ErrorException” 带有消息“include”(/var/www/market/app/services/ProductDomain.php): 无法打开流:中没有这样的文件或目录 /var/www/market/app/controllers/CloudController.php:27

这可能是由于与其他自动装弹机发生冲突造成的,可能是laravel的自动装弹机。我想知道如何使我的自动加载器只加载服务文件夹下的类文件,其余的类文件由laravel framework的自动加载器加载


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

如果文件实际存在,并且您对其拥有正确的权限(您可以使用chmod 777进行测试),请尝试
composer安装
,然后composer
转储自动加载-o

我通过先检查文件存在来解决这个问题。自动装弹机有装弹顺序

,

如果必须有多个自动加载函数,则spl_autoload_register() 考虑到这一点。它有效地创建了一个自动加载函数队列, 并按照定义的顺序遍历它们。通过 相反,_autoload()只能定义一次


因此,我定义的autoloader将在laravel framework的autoloader之前加载php类。

您有/var/www/market/app/services/ProductDomain.php这个文件吗?区分大小写的文件确保
/var/www/market/app/services/ProductDomain.php
存在?否,此类可能属于composer安装的其他软件包。laravel还具有自动加载程序,例如控制器文件夹中的类文件由另一个自动加载程序自动加载。所以这里的自动加载器冲突。我的自动加载程序尝试加载不属于服务路径的类文件。我确信ProductDomain.php存在。但它不在服务文件夹中。我希望我的自动加载器只加载服务文件夹中的类文件,而不是其他文件。
public function __construct()
{
    spl_autoload_register(function($classname) {
        include app_path() . '/services/' . $classname . '.php';
    });
}
public function __construct()
{
    spl_autoload_register(function($classname) {
        if(file_exists(app_path() . '/services/' . $classname . '.php'))
            include app_path() . '/services/' . $classname . '.php';
    });
}