Почему изменения, внесенные в шаблон Blade, не отображаются и кэш не сбрасывается?

Как заставить Laravel очищать кеш Blade при каждом изменении шаблона, а не только после выполнения команды `php artisan view:clear` в Laravel 8?
  • 11 марта 2024 г. 8:29
Ответы на вопрос 2
Проблема может быть связана с тем, что Laravel кэширует Blade шаблоны для улучшения производительности. По умолчанию, кэш Blade не обновляется автоматически при каждом изменении шаблона, а только после выполнения команды `php artisan view:clear`.

Чтобы заставить Laravel очищать кеш Blade при каждом изменении шаблона, вы можете добавить следующий код в файл `AppServiceProvider.php` в метод `boot()`, который будет выполнять очистку кэша Blade при каждом запросе:

```php
public function boot()
{
    if ($this->app->environment('local')) {
        $this->app['view']->composer('*', function ($view) {
            $view->with('clear_cache', true);
        });
    }
}
```

Этот код добавляет переменную `clear_cache` в каждый просмотр Blade, которая равна `true`, если приложение находится в локальной среде. Это заставит Laravel очищать кеш Blade при каждом запросе в локальной среде.

Помните, что использование этого подхода может снизить производительность вашего приложения, поэтому рекомендуется использовать его только во время разработки.
Если посмотреть в исходник блэйд-компилятора, то видно, что актуальность кэша проверяется по времени изменения файла (не его хэшу) 

public function isExpired($path)
    {
        // ...
        return $this->files->lastModified($path) >=
               $this->files->lastModified($compiled);
    }
public function lastModified($path)
    {
        return filemtime($path);
    }


И тогда можно сделать вывод, что ваш FTP клиент не изменяет время модификации файла при его загрузке. Точнее говоря, он предотвращает изменение этой метки (устанавливает исходную).

В шторме для этого есть опция "Preserve files timestamp" в разделе
File | Settings | Build, Execution, Deployment | Deployment | Options

Похожие вопросы