Laravel: Могу ли я добавить пользовательский метод в контроллер API, который маршрутизируется через API. php? - PullRequest
1 голос
/ 28 февраля 2020

Я знаю, что могу легко создать API в laravel, как показано ниже.

Http/Controllers/Api/MyApiController.php
use App\Model\MyModel;

class MyApiController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $models = MyModel::all();
        return $models;
    }

    ....

routes/api.php
Route::group(['middleware' => ['api']], function(){
    Route::resource('myTable', 'Api\MyApiController');
});

Но это кажется, что он имеет только основные * CRUD методы. Есть ли способ добавить пользовательский метод и вызвать его по некоторым запросам Http? Я имею в виду, если бы я добавил свой собственный метод, например, так:

    public function myMethod()
    {
        $models = MyModel::all()->where('id', '>', 100)->get();
        return $models;
    }

Я хочу использовать его по такому запросу, как GET /api/MyMethod/{id}. Кто-нибудь знает какие-либо способы без добавления маршрута к web.php?
спасибо.

1 Ответ

2 голосов
/ 28 февраля 2020

Можно. Вам просто нужно определить эти маршруты в файле routes/api.php.

routes/api.php
Route::group(['middleware' => ['api']], function(){
    Route::resource('myTable', 'Api\MyApiController');

    // Define new routes like this
    Route::get('myTable/MyMethod/{id}', 'Api\MyApiController@myMethod');
});

Обновление

Даже если Это прекрасно для определения маршрутов с именами пользовательских методов (кроме базовых c CRUD) таким образом, это часто может привести к перенаселению контроллеров. Посмотрите этот интересный разговор Адама Уотана об этой проблеме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...