自动加载器冲突,无法打开流
autoloader conflicts, fail to open stream
我在我的控制器文件中编写了自动加载程序来加载 class 文件。这很好地加载了服务文件夹中的 class。但是当加载 class 不在服务文件夹中时会导致此问题。
[2017-05-11 17:38:23] production.ERROR: exception 'ErrorException'
with message 'include(/var/www/market/app/services/ProductDomain.php):
failed to open stream: No such file or directory' in
/var/www/market/app/controllers/CloudController.php:27
public function __construct()
{
spl_autoload_register(function($classname) {
include app_path() . '/services/' . $classname . '.php';
});
}
这可能是与其他自动加载器冲突造成的,可能是laravel的自动加载器。我想知道如何让我的自动加载器只加载服务文件夹下的 class 文件,其余 class 文件由 laravel 框架的自动加载器加载。
如何解决这个问题。提前谢谢你。
如果文件实际存在,并且您有正确的权限(您可以执行 chmod 777 进行测试)尝试 composer install
,然后是 composer dump-autoload -o
我通过先检查文件是否存在来解决这个问题。并且自动加载器有加载顺序。
If there must be multiple autoload functions, spl_autoload_register()
allows for this. It effectively creates a queue of autoload functions,
and runs through each of them in the order they are defined. By
contrast, __autoload() may only be defined once.
public function __construct()
{
spl_autoload_register(function($classname) {
if(file_exists(app_path() . '/services/' . $classname . '.php'))
include app_path() . '/services/' . $classname . '.php';
});
}
所以我定义的自动加载器将在 laravel 框架的自动加载器之前加载 php class。
我在我的控制器文件中编写了自动加载程序来加载 class 文件。这很好地加载了服务文件夹中的 class。但是当加载 class 不在服务文件夹中时会导致此问题。
[2017-05-11 17:38:23] production.ERROR: exception 'ErrorException' with message 'include(/var/www/market/app/services/ProductDomain.php): failed to open stream: No such file or directory' in /var/www/market/app/controllers/CloudController.php:27
public function __construct()
{
spl_autoload_register(function($classname) {
include app_path() . '/services/' . $classname . '.php';
});
}
这可能是与其他自动加载器冲突造成的,可能是laravel的自动加载器。我想知道如何让我的自动加载器只加载服务文件夹下的 class 文件,其余 class 文件由 laravel 框架的自动加载器加载。
如何解决这个问题。提前谢谢你。
如果文件实际存在,并且您有正确的权限(您可以执行 chmod 777 进行测试)尝试 composer install
,然后是 composer dump-autoload -o
我通过先检查文件是否存在来解决这个问题。并且自动加载器有加载顺序。
If there must be multiple autoload functions, spl_autoload_register() allows for this. It effectively creates a queue of autoload functions, and runs through each of them in the order they are defined. By contrast, __autoload() may only be defined once.
public function __construct()
{
spl_autoload_register(function($classname) {
if(file_exists(app_path() . '/services/' . $classname . '.php'))
include app_path() . '/services/' . $classname . '.php';
});
}
所以我定义的自动加载器将在 laravel 框架的自动加载器之前加载 php class。