关于laravel6 路由分割后,路由缓存无效的问题?
如图,我将routes/web.php分割为web目录下的多个文件,在我执行
php artisan route:cache
之前,这些路由均正常访问,但在我执行完上面这个缓存命令后,就出现找不到路由的情况,在执行完下面这个路由缓存清理命令后,又恢复正常。
php artisan route:clear
请问,如果我想将路由分割,又想路由缓存的话,应该怎么做呢?
解决方案
关键点在
require_once
上,你需要改为require
才可以。原因
因为在执行
php artisan route:cache
的时候,会进行两遍容器的启动:第一次是 artisan 命令自身需要启动一次容器,第二次是route:cache
这个命令类中手动获取了一个新的容器实例,关键代码在这里:如果你用
require_once
的话,那么第二次获取新的容器实例,就不会再加载你的文件了。而缓存就是根据第二次新的容器实例中的路由进行缓存的。第二次没有加载你的路由,就不会生成缓存。道理就是这样。对比实验
按照你的代码,将 require 改回 require_once 后,把原框架中 获取新容器 实例的方法改为 获取当前第一次 初始化的容器,进行对比:
此时再次执行
php artisan route:cache
是可以生成缓存的。缓存后的路由在这里
routes-v7.php
,我的是 Laravel 8: