如何在开发模式下禁用模板缓存?

时间:2013-06-06 20:21:11

标签: laravel laravel-4

每当我在模板中更改某些内容时,我都必须手动清除缓存。 有没有办法在开发模式下禁用模板缓存?

9 个答案:

答案 0 :(得分:11)

如果您使用的是PHP5.5,那么我建议您在php.ini

中配置opcache
opcache.revalidate_freq=0

此值设置应从缓存更新视图的时间频率。该值通常为60秒左右。将其设置为0将使您的缓存每次都更新。

答案 1 :(得分:6)

我使用了" Gadoma"的解决方案。有时候。但是因为没有" filters.php"在 Laravel 5 中,这是我最新Laravel版本的中间件类:

<?php
namespace App\Http\Middleware;

use Closure;
use Illuminate\Contracts\Routing\Middleware;

class CacheKiller implements Middleware {

    /**
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {

        $cachedViewsDirectory = app('path.storage').'/framework/views/';

        if ($handle = opendir($cachedViewsDirectory)) {

            while (false !== ($entry = readdir($handle))) {
                if(strstr($entry, '.')) continue;    
                @unlink($cachedViewsDirectory . $entry);    
            }

            closedir($handle);
        }

        return $next($request);

    }

}

在你的Kernel.php中:

protected $middleware = [
        ...
        'App\Http\Middleware\CacheKiller',
    ];

不是最好的解决方案,但它确实有效。

答案 2 :(得分:6)

根据此request,将本地环境的应用程序缓存驱动程序更改为array

答案 3 :(得分:4)

看起来刀片正在使用文件时间戳来重建页面。

因此,如果刀片没有直接更新页面,则有以下几种选择:

1 - 如果您使用FTP或其他远程协议工作,则两个操作系统上的日期可能不匹配。尝试将您的客户端放在将来或服务器中(几秒钟即可)。

提醒:对于基于Linux的操作系统,一个简单的date --set可以正常工作,例如{18}下午晚些时候date --set 18:30:00

2 - (重新发布wino评论)您的客户可能不会更新已编辑文件的时间戳。您必须编辑IDE的配置。

答案 4 :(得分:4)

当我不了解您的配置时,调试起来比较困难。我只能提供帮助而不是直接删除视图缓存,您可以运行:

$ php artisan cache:clear

您可以添加一个进程(取决于您的操作系统)来监听文件更改并自动运行命令。

答案 5 :(得分:2)

在laravel 5.2中:创建一个新的中间件,添加到&#39; web&#39; $middlewareGroups中的Kernel.php。这将调用artisan命令清除所有已编译的视图文件。

namespace App\Http\Middleware;

use Artisan;
use Closure;

class ClearViewCache
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (env('APP_ENV') === 'local') {
            Artisan::call('view:clear');
        }

        return $next($request);
    }
}

答案 6 :(得分:1)

您可以尝试使用此路由过滤器,将cache time设置为0,这样就可以在每次请求时重新创建视图:)

来自this gist

Route::filter('cache', function( $response = null )
{

    $uri = URI::full() == '/' ? 'home' : Str::slug( URI::full() );

    $cached_filename = "response-$uri";

    if ( is_null($response) )
    {
        return Cache::get( $cached_filename );
    }
    else if ( $response->status == 200 )
    {
        $cache_time = 30; // 30 minutes

        if ( $cache_time > 0 ) {
            Cache::put( $cached_filename , $response , $cache_time );
        }
    }

});

希望这可以帮助你,但我没有测试它所以我不能保证它会工作。

答案 7 :(得分:0)

从PHP 5.3到PHP 5.5升级的一些额外缓存问题可在此处获取:Laravel and view caching in development -- can't see changes right away

答案 8 :(得分:0)

只需将此放在您的应用中:

if (env('APP_DEBUG')) ini_set('opcache.revalidate_freq', '0');