Михаил Юдин

Lumen middleware для UNESCAPED_UNICODE и PRETTY_PRINT

Выключите пожалуйста блокировку рекламы для этого сайта чтобы поддержать проект

Долго искал правильный способ возвращать PRETTY_PRINT и UNESCAPED_UNICODE в ответе от API в фреймворке Lumen.

Хотелка

В современных реалиях нет нужды экранировать unicode в ответе от JSON API. Ещё хотелось красивый вывод для отладки. Лазил по интернетам, так и не нашёл решение, наверное не там искал. В голову пришло заюзать middleware для трансформации ответа.

Реализация

Решение было простым: берём response - ответ и добавляем к нему нужные опции при помощи setEncodingOptions как к json_encode. В моей реализации я добавил JSON_PRETTY_PRINT, JSON_UNESCAPED_UNICODE, JSON_UNESCAPED_SLASHES. Последнее может лишнее, но хотелось красивого ответа при отладке.

Вариант “в лоб” выглядит так:

<?php

namespace App\Http\Middleware;

use Closure;

class UnescapedJsonMiddleware
{
    public function handle($request, Closure $next)
    {
        $data = $next($request);
        $data->setEncodingOptions(JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
        return $data;
    }
}

Его можно доработать для обработки только JSON ответов, но мне этого было достаточно.

Актуальная версия лежит тут: Laravel / Lumen json options for response using middleware.


Поддержать




Выключите пожалуйста блокировку рекламы для этого сайта чтобы поддержать проект

Чтобы не пропускать новости, можно подписаться на email рассылку.


Остались вопросы или есть пожелания, замечания — пишите в комментарии:

Ещё почитать