У меня есть API, написанный на Laravel, который использует Spat ie Laravel Пакет Query Builder для запроса таблицы и затем возвращает ответ JSON с использованием API Resource . Так как этот метод действует как функция поиска, любые ссылки на страницы должны также включать дополнительные параметры, отправленные с запросом. Вот пример:
MessageController. php
class MessageController extends Controller
{
public function index(Request $request)
{
$messages = QueryBuilder::for(Message::class)
->allowedFilters([
AllowedFilter::exact('id'),
AllowedFilter::scope('unread'),
])
->paginate(30);
return MessageResource::collection($messages->appends($request->except('page')));
}
}
Это прекрасно работает, пока вы не начнете вводить специальные символы, такие как [
или ]
в параметры URL. Например, мы могли бы отправить запрос на api/messages?filter[unread]=true
, и мы хотим, чтобы в ответе был раздел links
, подобный следующему:
Что мы хотим
... Other JSON Data ...
"links": {
"first": "https://test.test/api/messages?filter[unread]=true&page=1",
"last": "https://test.test/api/messages?filter[unread]=true&page=1",
"prev": null,
"next": null
},
... Other JSON Data ...
Что мы получаем
... Other JSON Data ...
"links": {
"first": "https://test.test/api/messages?filter%5Bunread%5D=true&page=1",
"last": "https://test.test/api/messages?filter%5Bunread%5D=true&page=1",
"prev": null,
"next": null
}, ... Other JSON Data ...
Есть ли простой способ сделать так, чтобы эти специальные символы остались без изменений?