有没有一个非常简单的解决方案或软件包,使我所有的模型属性camelCase,同时处理API(请求,响应),但在我的数据库中使用snake_case?我并不真的想对每个属性都使用属性setter/getter,我需要一些不那么麻烦的东西。
yduiuuwa1#
很简单创建App\Http\Middleware\FrontendCase.php并在路由中使用它。
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Contracts\Routing\ResponseFactory; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Str; class FrontendCase { public const CASE_SNAKE = 'snake'; public const CASE_CAMEL = 'camel'; public function handle(Request $request, Closure $next) { $request->replace( $this->convertKeysToCase( self::CASE_SNAKE, $request->post() ) ); $response = $next($request); if ($response instanceof JsonResponse) { $response->setData( $this->convertKeysToCase( self::CASE_CAMEL, json_decode($response->content(), true) ) ); } return $response; } private function convertKeysToCase(string $case, $data) { if (!is_array($data)) { return $data; } $array = []; foreach ($data as $key => $value) { $array[Str::{$case}($key)] = is_array($value) ? $this->convertKeysToCase($case, $value) : $value; } return $array; } }
1条答案
按热度按时间yduiuuwa1#
很简单
创建App\Http\Middleware\FrontendCase.php并在路由中使用它。