每当我在模板中更改某些内容时,我都必须手动清除缓存。 有没有办法在开发模式下禁用模板缓存?
答案 0 :(得分:11)
如果您使用的是PHP5.5,那么我建议您在php.ini
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');