我在控制器文件中编写自动加载器以加载类文件。这个加载类在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的自动加载器加载。
如何解决这个问题。提前谢谢。
答案 0 :(得分:1)
如果文件实际存在,并且您拥有正确的权限(您可以执行chmod 777进行测试)请尝试composer install
,然后在该作曲家dump-autoload -o
答案 1 :(得分:0)
我通过检查文件是否存在来解决这个问题。自动加载器有加载顺序。
如果必须有多个自动加载功能,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类。