如何禁用Laravel视图缓存?

时间:2014-09-12 16:59:25

标签: caching laravel blade

我的一个观点中有一个例外。但是,laravel没有告诉我视图的名称,所以我可以找到并修复它,而不是app/storage/views/110a3ecc0aa5ab7e6f7f50ef35a67a8b,这是没有意义的。

如何禁用此视图缓存,以便laravel使用并引用实际文件?

10 个答案:

答案 0 :(得分:20)

开箱即用?你不能。但是您可以扩展BladeCompiler类,覆盖方法resposible以检查视图是否已过期:

class MyBladeCompiler extends BladeCompiler {

    public function isExpired($path)
    {
        if ( ! \Config::get('view.cache'))
        {
            return true;
        }

        return parent::isExpired($path);
    }

}

您需要使用自己的编译器替换IoC容器中的BladeCompiler实例:

$app = App::make('app'); // or just $app = app();

$app->bindShared('blade.compiler', function($app)
{
    $cache = $app['path.storage'].'/views';

    return new MyBladeCompiler($app['files'], $cache);
});

然后你只需要在app / config / view.php文件中创建该密钥

<?php

return [

    'cache' => false,

    'paths' => [base_path().'/resources/views'],

    'pagination' => 'pagination::slider-3',

];

或者,就像我在这里一样:

return [

    'cache' => in_array(App::environment(), ['production', 'staging']),

];

答案 1 :(得分:8)

解决方案

打开php.ini

opcache.revalidate_freq=0
opcache.fast_shutdown=0

改变这个。重启apache。

答案 2 :(得分:1)

虽然有人会称之为粗略,但这是在我正在开发的小型应用程序上执行此操作的最快捷,最简单的方法

在我的路线指向的控制器上:

public function __construct()
{
    exec('php /full/path/to/artisan view:clear');
}

答案 3 :(得分:1)

这对我有用...将其添加到.env文件

CACHE_EXPIRE=-1

答案 4 :(得分:0)

Laravel创建视图缓存文件,因为它被告知要这样做。在.env文件中,您会遇到cache_driver,该文件的默认属性为file,将其更改为array

答案 5 :(得分:0)

检查您的.env文件 将CACHE_DRIVER =文件更改为CACHE_DRIVER = arra

答案 6 :(得分:0)

如果您有artisan,则清除缓存很容易

php artisan view:clear

如果您没有artisan(不知道为什么不想要它,这非常有用),则可以从项目的根源开始

cd storage/framework/views/
rm *.php

答案 7 :(得分:0)

但是聚会晚了一点。 我遇到了同样的问题:浏览器无法反映php代码的更改。

对我来说,简单的解决方案是:

将服务器上的时钟设置为与开发计算机相同的时间!

Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://docs.google.com/gview?embedded=true&url=https://aip.xyz.org/Accident.pdf"));
startActivity(browserIntent);

答案 8 :(得分:0)

您也可以通过这种方式清除缓存:

// Clear cache in laravel
Route::get('/clear-cache', function() {
    Artisan::call('cache:clear');
    // return what you want
    return "Cache is cleared";
});

答案 9 :(得分:-3)

在开发环境中,我只需添加和修改下一个:

  • bootstrap/start.php

    $env = $app->detectEnvironment(function(){return 'testing';});
    
  • app/config/testing/cache.php添加数组

    'cache' => false,
    
  • app/config/view.php添加数组

    'cache' => false,