如何禁用Laravel视图缓存?
问题原因:Laravel的视图缓存默认是开启的,无法直接禁用。需要通过扩展BladeCompiler类并覆盖检查视图是否过期的方法来实现禁用缓存。
解决方法:首先创建一个继承自BladeCompiler的自定义类MyBladeCompiler,并在其中重写isExpired方法,该方法判断视图缓存是否过期。如果配置文件中的view.cache为false,则视图缓存被视为过期。
然后,需要将IoC容器中的BladeCompiler实例替换为自定义的编译器。可以使用以下代码将自定义编译器绑定到IoC容器中的blade.compiler:
$app = App::make('app'); $app->bindShared('blade.compiler', function($app) { $cache = $app['path.storage'].'/views'; return new MyBladeCompiler($app['files'], $cache); });
接下来,只需要在app/config/view.php文件中创建一个'cache'键,并将其值设为false即可禁用视图缓存。也可以根据环境来动态设置缓存值。
需要注意的是,最新版本的Laravel已经支持默认禁用视图缓存,可以通过设置'cache'键为false来实现。更多信息可以参考链接stackoverflow.com/a/71790040/8485567。
需要注意的是,代码中的bindShared方法在Laravel 5.5中已被重命名为singleton。
如果在AppServiceProvider中添加代码无效,可能是因为核心的ViewServiceProvider覆盖了绑定。可以通过创建一个自定义类并在其中添加新的registerBladeEngine()方法来扩展ViewServiceProvider,并将核心的ViewServiceProvider替换为自定义类。
Laravel中如何禁用视图缓存?
问题原因:在Laravel版本大于v9.7.0中,可以在config/view.php
文件中添加以下代码来禁用视图缓存:
'cache' => App::environment('local') ? false : true
解决方法:在config/view.php
中添加上述代码即可禁用视图缓存。