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

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.

0
lindacom 20 Апр 2020 в 21:45

2 ответа

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

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

Дополнительный пример вы можете прочитать в документации.

0
Rangga Adhitya Prawira 20 Апр 2020 в 18:56

Я не думаю, что это возможно для создания параметров API URL. Я снова начал использовать этот учебник

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

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

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

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

0
lindacom 23 Апр 2020 в 15:47