27

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

4

9 回答 9

11

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

opcache.revalidate_freq=0

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

于 2014-04-12T23:49:11.550 回答
7

根据此要求,将您的应用程序缓存驱动程序更改array为适用于本地环境

于 2015-05-04T07:51:55.427 回答
6

我用了几次“Gadoma”的解决方案。但由于Laravel 5中不再有“filters.php”,这是我最新 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',
    ];

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

于 2015-04-15T08:52:16.427 回答
4

It looks that blade are using file timestamp for rebuilding pages.

So if pages are not directly updated by blade there are several options :

1 - If you are working by FTP or other remote protocol you may have the date mismatching on the two OS. Try to put your client in the future or the server in the past (few seconds is enough).

Reminder : for linux based os, a simple date --set works, for example date --set 18:30:00 for 18h30 pm.

2 - (Repost wino comment) You client may does not update the timestamp of your edited file. You have to edit the configuration of your IDE.

于 2013-12-19T17:50:14.973 回答
4

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

$ php artisan cache:clear

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

于 2014-04-25T09:38:38.713 回答
2

在 laravel 5.2 中:创建一个新的中间件,添加$middlewareGroupsKernel.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);
    }
}
于 2016-04-19T19:02:55.117 回答
1

只需将其放在您的应用程序中的某个位置:

if (env('APP_DEBUG')) ini_set('opcache.revalidate_freq', '0');
于 2015-04-13T19:44:14.003 回答
1

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

这个要点

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 );
        }
    }

});

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

于 2013-08-07T12:01:32.673 回答
0

从 PHP 5.3 升级到 PHP 5.5 的一些额外缓存问题可在此处获得:Laravel 和开发中的视图缓存——无法立即看到更改

于 2013-12-16T23:59:22.747 回答