Кэширование
Дополнительный пакет Intervention Image Cache расширяет возможности Laravel, позволяя кэшировать изображения.
Библиотека кэширования использует пакет Illuminate/Cache, который является частью Laravel и может быть легко интегрирован в Framework. В зависимости от конфигурации кеша Laravel, вы можете выбирать между:
- Файловой системой
- Memcached
- Redis
Установка
Установка расширения происходит через Composer:
composer require intervention/imagecache
Применение
В публичной части Laravel public
создаем папку img
и кладем в нее тестовый файл с картинкой, должен получится следующий путь:
public/img/kartinka.jpg
Создаем новый роут в файле web.php
:
routes/web.php<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\SiteController;
Route::get('images/{link}', function ($link) {
// SiteController будет классом, реализующим ваш метод getImageThumb
$img = SiteController::getImageThumb($link);
// Функция будет возвращать картинку
return $img;
});
Создаем контроллер с методом который будет производить манипуляцию с картинкой и создавать кэш:
app/Http/Controllers/SiteController.php<?php
namespace App\Http\Controllers;
use Image;
class SiteController extends Controller
{
public static function getImageThumb($link)
{
$path = "img/" . $link;
$img = Image::cache(function ($image) use ($path) {
return $image->make($path)->resize(200, 200);
}, 5, true);
return $img->response();
}
}
Теперь в файле шаблона blade
генерируете URL-адрес следующим образом:
<img src="{{ asset('images/kartinka.jpg') }}">
Laravel не будет автоматически очищать файлы кэша с истекшим сроком действия. Поэтому, если вы хотите очистить все кэшированные изображения с истекшим сроком действия, вам придется управлять этим действием отдельно.