【问题标题】:API Resource LaravelAPI 资源 Laravel
【发布时间】:2020-06-13 18:48:27
【问题描述】:

我想了解 Laravel 中 API 资源背后的概念。如果我理解答案,我会阅读here。如果我有一个自定义端点并且为该控制器定义了 apiresource 端点。当我在控制器上调用自定义端点时,是否会自动调用 apiresource 端点(如 show、store)?

例如我有这个:

Route::post('postorderitems', 'Api\OrderitemsController@postOrderItem')->middleware('auth:api');

如果我调用它并且这是定义的:

Route::apiResource('orderitems', 'Api\OrderitemsController')->middleware('auth:api');

OrderitemsController 中的 store 方法会被自动调用吗?

【问题讨论】:

    标签: php laravel api


    【解决方案1】:

    Route::apiResource() 定义给定资源的 REST API 路由:indexstoreviewupdatedestroy

    您的控制器可能已经定义了与上述名称相同的公共方法。如果控制器有这些方法,那么,是的,路由将与控制器功能“关联”。

    Route::apiResource('orderitems', 'Api\OrderitemsController')->middleware('auth:api');

    orderitems 发送 POST 请求将由 Api\OrderitemsController@store 方法。

    我建议运行php artisan route:list 命令来查看您的路由指向哪个控制器的方法。

    Resource Controllers

    【讨论】:

    【解决方案2】:

    根据 Laravel 文档

    在声明将由 API 使用的资源路由时,您将 通常希望排除呈现 HTML 模板的路由,例如 createedit。为方便起见,您可以使用apiResource 方法 自动排除这两条路线:

    Route::apiResource('photos', 'PhotoController');
    

    所以如果你已经定义了apiResource如下,并且发送POST请求到orderitems,那么只有store方法和OrderitemsController的store方法会被自动调用。

    Route::apiResource('orderitems', 'Api\OrderitemsController')->middleware('auth:api');
    

    参考:

    Laravel -> Controllers -> Resource Controllers

    【讨论】:

    • 那么当我调用postorderitems时,会不会也调用store方法,因为postorderitems是要保存的,还有store呢?
    • @tksilicon,不,不是。如果您调用postorderitems,它将执行您在此处指定的postOrderItem Route::post('postorderitems', 'Api\OrderitemsController@postOrderItem');
    • 好的。因此 API 资源是一种定义默认 CRUD API 端点的方法,当我调用自定义端点时,它不会被调用,除非我在没有指定任何自定义端点的情况下调用 say post 或 get on controller。这就是我从你的解释中学到的。
    • 是的 apiResource 用于 CRUD API 操作,正常路由不会受到影响。
    猜你喜欢
    • 2020-03-23
    • 1970-01-01
    • 2020-03-30
    • 2016-07-03
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多