Каждый раз, когда я что-то меняю в шаблонах, я должен очищать кеш вручную. Есть ли способ отключить кэширование шаблонов в режиме разработки?
Как я могу отключить кэширование шаблонов в режиме разработки?
Ответ 1
Если вы используете PHP5.5, я бы предложил настроить opcache в php.ini
opcache.revalidate_freq=0
Это значение устанавливает временную частоту, когда представления должны обновляться из кеша. Это значение обычно составляет 60 секунд. Установка его в 0 сделает обновление кеша каждый раз.
Ответ 2
Я использовал решение "Гадома" несколько раз. Но поскольку в 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',
];
Не самое приятное решение, но оно работает.
Ответ 3
Похоже, что blade-сервер использует временную метку файла для восстановления страниц.
Итак, если страницы не обновляются непосредственно клиентом, есть несколько вариантов:
1 - Если вы работаете по FTP или другому удаленному протоколу, у вас может быть несоответствие даты для двух ОС. Попробуйте поставить своего клиента в будущем или на сервер в прошлом (достаточно нескольких секунд).
Напоминание: для ОС Linux, основанного на ОС, простой date --set
работает, например date --set 18:30:00
в течение 18:30 вечера.
2 - (Комментарий Repost wino
). Клиент может не обновлять временную метку вашего отредактированного файла. Вы должны отредактировать конфигурацию своей среды разработки.
Ответ 4
Сложнее отлаживать, когда я не понимаю вашу конфигурацию. Все, что я могу предложить в качестве справки, вместо удаления кеша представления непосредственно вы можете запустить:
$ php artisan cache:clear
Возможно, вы могли бы добавить процесс (в зависимости от вашей ОС), чтобы прослушивать изменения файла и автоматически запускать команду.
Ответ 5
В соответствии с этим , измените драйвер кэша вашего приложения на array
для локальной среды.
Ответ 6
Вы можете попробовать этот фильтр маршрута, установив 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 );
}
}
});
Надеюсь, это поможет вам, но я не тестировал его, поэтому я не могу гарантировать, что он сработает.
Ответ 7
В laravel 5.2: Создайте новое промежуточное программное обеспечение, добавьте в 'web' $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);
}
}
Ответ 8
Некоторые дополнительные проблемы кэширования от обновления с PHP 5.3 до PHP 5.5 доступны здесь: Laravel и кэширование просмотров в процессе разработки - не видно изменений прямо сейчас
Ответ 9
Просто поместите это в свое приложение:
if (env('APP_DEBUG')) ini_set('opcache.revalidate_freq', '0');