如何禁用Laravel视图缓存?

8 浏览
0 Comments

如何禁用Laravel视图缓存?

我在我的一个视图中遇到了一个异常。然而,laravel并没有告诉我视图的名称,以便我能够找到并修复它,而是说异常出现在app/storage/views/110a3ecc0aa5ab7e6f7f50ef35a67a8b,这是没有意义的。

我该如何禁用视图缓存,以便laravel使用和引用实际的文件?

0
0 Comments

问题原因: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替换为自定义类。

原文链接:stackoverflow.com/questions/24466602

0
0 Comments

Laravel中如何禁用视图缓存?

问题原因:在Laravel版本大于v9.7.0中,可以在config/view.php文件中添加以下代码来禁用视图缓存:

'cache' => App::environment('local') ? false : true

解决方法:在config/view.php中添加上述代码即可禁用视图缓存。

参考链接:https://github.com/laravel/framework/pull/41859

0
0 Comments

问题的原因是要禁用Laravel视图缓存。解决方法是在.env文件中添加以下内容:CACHE_EXPIRE=-1。这个方法不仅禁用了视图缓存,还有其他作用。

0