Как создать Laravel API конечной точки маршрута / параметров запроса? - PullRequest
0 голосов
/ 20 апреля 2020

Я бы хотел иметь возможность фильтровать ответ json, используя некоторые поля в базе данных, например, api / v1 / user? Username = mary, но не знаю, как это сделать. Мой второй вопрос заключается в том, что маршрут api / v1 / user / 3 работает, но я не могу вспомнить, как я это настроил, поскольку я делал это когда-то go. Кто-нибудь может помочь?

api. php

Route::group(['prefix' => 'v1'], function () {
Route::apiResource('/user', 'UserController');
});

пользовательский ресурс

public function toArray($request)
    {
                return parent::toArray($request); 
    }

пользовательский контроллер


public function show(User $user): UserResource
    {
        return new UserResource ($user);
    }

 public function index(): UserResourceCollection
    {
            return new UserResourceCollection(User::orderBy('created_at', 'desc')
        ->paginate(5)

    );

    }

 public function store(Request $Request)
    {
        $request->validate([
            'first_name' => 'required',
            'last_name' => 'required',
            'email' => 'required',
        ]);

        $user = User::create($request->all());

        \Mail::to($user)->send(new Welcome);
        return new UserResourse($user);
    }


public function update(User $user, Request $request): UserResource
    {
        $user->update($request->all());
        return new UserResource($User);
    }

public function destroy(User $user)
    {
        $user->delete();
        return response()->json();
    }

}

ОБНОВЛЕНО

Я видел несколько уроков с советами, которые дал пользователь ниже, но я не знаю, как их собрать, потому что у меня уже есть метод show выше. Я попытался закомментировать метод show и создать другой метод show для строки запроса

public function show(User $user): UserResourceCollection
    {
       $request->input('username'); 
       return new UserResourceCollection(User::orderBy('created_at', 'desc')
       ->where('username', '=', $username)
        ->paginate(2)

    );

    }

и добавил маршрут GET

Route::group(['prefix' => 'v1'], function () {
Route::apiResource('/user', 'UserController');

Route::get('/user/{username?}','UserController@show');
});

Это работает как конечная точка. Часть разбивки на страницы работает, я сделал ее меньше, поэтому я знаю, что она вызывает метод, но она ищет по идентификатору, и я хочу искать по имени пользователя. В идеале я хочу использовать параметр запроса, такой как api / v1 / user? Username = mary.

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Не думаю, что возможно создать параметры api url. Я снова начал использовать этот урок

https://www.youtube.com/watch?v=z3YPhYwcbBM.

Этот способ означает, что мне всегда нужно знать идентификатор (поиск по идентификатору продукта, а не фильтрацию отзывов по поисковому запросу), который не идеален

например, http://localhost: 8000 / api / v1 / products / 2 / reviews

однако я могу добавить больше конечных точек вместо таких обзоров, как категории et c.

0 голосов
/ 20 апреля 2020

Чтобы получить запрос json, вы можете, например, вызвать $request->input('name').

Вы можете настроить действие ресурса на контроллере. Например, вы можете создать UserController.show метод. Таким образом, метод GET /user/{id} будет обработан как UserController.show

. Например, вы читаете документацию .

...