首页 > 解决方案 > Laravel:我可以将自定义方法添加到由 api.php 路由的 API 控制器吗?

问题描述

我知道我可以在 laravel 中轻松创建 API,如下所示。

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
谢谢。

标签: phplaravel

解决方案


你可以。您只需要在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');
});

更新

尽管以这种方式使用自定义方法名称(除了基本的 CRUD 方法)定义路由非常好,但它通常会导致控制器过多。查看Adam Wathan 关于这个问题的有趣演讲。


推荐阅读