0

我有这样的路线

Route::get('/vcs-integrations/{vcs-provider}/authenticate','VcsIntegrationsController@authenticate');

和处理路由的方法我正在使用模型路由绑定发生如下

<?php

....
use App\Models\VcsProvider;
....

class VcsIntegrationsController extends Controller
{
  public function authenticate(VcsProvider $vcsProvider, Request $request)
    {
        ...
        // some logic
        ...
    }
}

当我尝试访问路由时,由于参数名称不匹配,我得到 404。

那么,我如何知道 laravel 在路由模型绑定中期望的参数名称?

4

2 回答 2

3

从路由参数文档:

“路由参数总是用{}大括号括起来,应该由字母字符组成,并且可能不包含-字符。不要使用-字符,而是使用下划线(_)。” - Laravel 7.x 文档 - 路由 - 路由参数 - 必需参数

您应该能够像{vcs_provider}在路由定义中一样定义参数,然后根据$vcs_provider需要在方法签名中使用参数名称。_如果您愿意,也可以不使用 来命名,但-在命名时避免使用 , 连字符。

玩得开心,祝你好运。

于 2020-07-31T19:01:24.990 回答
1

Laravel 自动解析定义在路由或控制器操作中的 Eloquent 模型,其类型提示的变量名称与路由段名称匹配

这意味着如果您希望隐式绑定起作用,您需要将路由参数命名为与您的变量相同。由于您的变量名称是vcsProvider,您的路线应该是:

Route::get('/vcs-integrations/{ vcsProvider }/authenticate','VcsIntegrationsController@authenticate');

于 2020-07-31T18:59:12.793 回答