【问题标题】:How to find the parameter name expected in laravel model route binding如何在 laravel 模型路由绑定中找到预期的参数名称
【发布时间】:2020-11-21 14:35:22
【问题描述】:

我有这样的路线

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 在路由模型绑定中期望的参数名称?

【问题讨论】:

  • 你试过了吗: php artisan route:list ,它会显示带有参数名称的路线,使用 ctrl + f 找到你的路线..
  • 它显示 {vcs-provider} 而在 PHP 中你不能创建 $vcs-provider 变量

标签: laravel route-model-binding


【解决方案1】:

来自路由参数文档:

“路由参数始终包含在{} 大括号中,并且应该由字母字符组成,并且不能包含- 字符。不要使用- 字符,而是使用下划线(_)。” - Laravel 7.x Docs - Routing - Route Parameters - Required Parameters

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

玩得开心,祝你好运。

【讨论】:

  • 谢谢,它为我解决了这个问题
【解决方案2】:

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

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

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

【讨论】:

  • 这也是一个正确的答案。但是由于我不希望参数名称是驼峰式的,所以我发现@lagbox 的答案更合适。谢谢你:)
猜你喜欢
  • 2017-01-10
  • 2017-07-06
  • 2019-10-15
  • 1970-01-01
  • 2021-05-24
  • 2016-06-04
  • 2018-12-17
  • 2023-04-01
  • 2016-02-26
相关资源
最近更新 更多