Подтвердить что ты не робот

Как я могу отключить кэширование шаблонов в режиме разработки?

Каждый раз, когда я что-то меняю в шаблонах, я должен очищать кеш вручную. Есть ли способ отключить кэширование шаблонов в режиме разработки?

4b9b3361

Ответ 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);
    }
}

Ответ 9

Просто поместите это в свое приложение:

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