Laravel 7.x - Использование ресурсов API для генерации ссылок на страницы при сохранении строки запроса со специальными символами - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть 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 ...

Есть ли простой способ сделать так, чтобы эти специальные символы остались без изменений?

...