【问题标题】:Laravel request helper in URL to get ID / Resource IDLaravel 在 URL 中请求帮助器以获取 ID/资源 ID
【发布时间】:2018-08-24 14:02:27
【问题描述】:

我正在开发一个 Laravel 5.6 应用,并且有以下两个 API 路由:

Route::resource('/partners', 'API\Partners\PartnersController');

Route::resource('/partners/{id}/sales-team', 'API\Partners\SalesTeamController');

在这两个控制器中,我在构造方法中引用了一个自定义中间件“VerifyUserOwnsTeam”。

要从我之前拥有的中间件中的请求中获取资源 ID:

$request->route('partner')

这适用于一个 URL,例如:

/api/partners/1

但是,我现在正在调用一个新的端点,例如:

/api/partners/1/sales-team

在我的中间件中,合作伙伴的请求路由参数为空。如果我将引用更改为:

$request->route('id')

然后它适用于后一个端点,但在第一个端点上因空值而失败。

知道如何保持这种一致性吗?

【问题讨论】:

    标签: php laravel laravel-5 laravel-middleware laravel-request


    【解决方案1】:

    你需要改变你的第一条路由来接受一个id:

    Route::resource('/partners/{id?}', 'API\Partners\PartnersController');
    

    【讨论】:

    • 资源路由已经将id设置为接受参数。
    • 是的,很抱歉,只是注意到这是一条资源路线
    • 你不能将你的路由参数命名为partner吗? Route::resource('/partners/{partner}/sales-team', 'API\Partners\SalesTeamController');
    • 嘿好主意,我在几分钟前也试过了,但没用。再试一次,你知道什么!工作就像一个魅力,无论哪种方式都欢呼:)
    【解决方案2】:

    对于所有搜索者: 对于编辑/更新/删除操作中的资源,您可以使用

    访问请求类中的模型 ID
    $this->get('id') 
    

    【讨论】:

      【解决方案3】:

      我使用 laravel 8 并在我的情况下得到了解决。 我已将路由器中的参数 id 放入我的控制器中。然后将 id 与 compact 函数一起用于我的视图。

      这是代码示例

      我的路由器:

      Route::resource('stock/{id}', StockController::class);
      

      我的控制器:

      public function index($id, Request $request)
      {
          return View::make("pages.stock.index", compact('id'));
      }
      

      我的看法:

      {{$id}}
      

      我知道这对你的情况是否有效,但我希望你能得到一些线索。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-19
        • 1970-01-01
        • 1970-01-01
        • 2016-11-06
        相关资源
        最近更新 更多