#php #laravel #api #middleware #laravel-7
#php #laravel #API #промежуточное программное обеспечение #laravel-7
Вопрос:
У меня есть API на Laravel 7.0, где все ответы автоматически преобразуются в json по умолчанию из-за промежуточного программного обеспечения api routes.
Проблема в том, что некоторые ответы вызывают ошибку «Искаженные символы UTF-8» в ответе JSON, поэтому мне приходится вручную обрабатывать все данные, прежде чем возвращать их на контроллер, например:
return FormatString::convertLatin1Utf8($data);
Это работает нормально, но теперь я должен возвращать данные таким образом в каждом отдельном методе api.
У меня есть промежуточное программное обеспечение для обработки криптографии при входящих и исходящих запросах, например:
public function handle($request, Closure $next) {
//... some processing before request
$request = $next($request)->original;
//... some processing after request
return response()->json($request);
}
Я подумал о форматировании своих данных в промежуточном программном обеспечении после обработки запроса, поэтому мне не пришлось бы вызывать FormatString в каждом методе, например:
public function handle($request, Closure $next) {
//... some processing before request
$request = $next($request)->original;
//... some processing after request
$request['data'] = FormatString::convertLatin1Utf8($resquest['data']);
return response()->json($request);
}
Но при $next($request)
вызове он пытается обработать ответ Json для неформатированных данных и выдает ошибку, которую я пытаюсь избежать.
Есть ли какой-либо способ получить данные запроса до того, как Laravel попытается обработать в Json, без необходимости всегда форматировать их при возврате контроллера?
Комментарии:
1. вероятно, вы могли бы использовать какое-то лучшее именование, чем повторное
$request
использование там2. Другим вариантом может быть создание
ApiController
с помощью такого метода, какgetResponse($data)
, выполняете ли вы преобразование там, и чтобы все ваши контроллеры расширяли этот вызов контроллераreturn $this->getResponse($data);
3. похоже, вы путаете запрос и ответ в своем описании в своем вопросе
4. Этот метод ApiController будет в основном тем же, что я делаю сейчас, повторяя один и тот же вызов метода в каждом ответе вместо форматирования всех ответов в одном месте.