Laravel api. Как сделать необязательный роут

96
24 ноября 2020, 09:00

Подскажите, как в Laravel сделать route как тут:
https://jsonplaceholder.typicode.com/comments?_page=3&_limit=2

Можно обратиться и без _limit=2 и без ?_page=3&_limit=2

Код, как я сделал:

Route::get('/articles/_page={currentPage?}&_limit={limit?}', "Controller");

Пробывал вот так: /articles?_page={currentPage?}&_limit={limit?}.
Да и другими разными способами, не знаю как объявить эту вторую часть как не обяз. параметр

При /api/articles... не обращается.

Answer 1

Маршрут для пагинации articles может быть один, все остальное (page, limit) отлавливаете через request() с обязательной валидацией:

// routes\api.php
Route::group(['prefix' => 'v1', 'namespace' => 'V1', 'middleware' => 'auth:api'], function() {
    Route::get('/articles', 'ArticlesController@index');
});

Пишите scope для модели, можете в трейт вынести:

public function scopeAdvancedFilter($query)
{
  $data = $this->validateAdvancedFilter(request()->all());
  return $query->paginate($data['limit']);
}
protected function validateAdvancedFilter(array $request)
{
  $request['limit'] = $request['limit'] ?? 15;
  $validator = validator()->make($request, [
    'limit' => 'sometimes|required|integer|min:5',
    'page' => 'sometimes|required|integer|min:1',
  ]);
  return $validator->validate();
}

В контроллере:

namespace App\Http\Controllers\Api\V1;
use Illuminate\Http\Response;
...
/**
 * Display a listing of the resource.
 *
 * @return \Illuminate\Http\Response
 */
public function index()
{
  $articles = Article::with([
      'categories:categories.id,categories.title,categories.slug',
      'user:users.id,users.name',
    ])
    ->advancedFilter();
  $collection = ArticleResource::collection($articles);
  return $collection->response()
    ->setStatusCode(Response::HTTP_PARTIAL_CONTENT);
}
...
READ ALSO
Рандомный выбор между словами

Рандомный выбор между словами

Допустим у меня есть две переменные

117
Выполнение кода несколько раз

Выполнение кода несколько раз

Мне нужно выполнять php скрипт несколько раз, количество рандомно генеритсяВставляю то что нужно циклично выполнять в цикл for, но код почему-то...

140
Как получить картинку из другого поста вордпресс

Как получить картинку из другого поста вордпресс

Всем здрастеЕсть новая задачка, и снова со звездочкой

89
Вопрос по Telegram API

Вопрос по Telegram API

Есть приватный канал, в котором числиться мой основной телеграм аккаунт, я хочу сделать пересылку сообщений из этого канала, в другой канал,...

148