php - 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
?
谢谢。
解决方案
你可以。您只需要在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 关于这个问题的有趣演讲。