Php 自动加载程序冲突,无法打开流
我在控制器文件中写入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的自动加载器加载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.
如何解决这个问题。提前谢谢。如果文件实际存在,并且您对其拥有正确的权限(您可以使用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';
});
}