Laravel 5.5使用自定义键名的路由模型绑定

时间:2018-11-24 15:55:11

标签: php laravel

我搜索了很多已经与SO相关的主题。我无法使其与Controller方法一起使用,但是当我将其添加到路由文件中时就可以使用它,如下所示:

这两种方法在应用程序模型aka app / Application 中都具有此功能:

class Application extends Model
{

    public function getRouteKeyName(): string
    {
        return 'token';
    }
    ...

所以有效的我的 routes / web.php 如下所示:

Route::get('/application/{locale}/{application}', function (string $locale, App\Application $application) {
    return view(
        'application.application.main',
        [
            'application' => $application,
            'isLanguageNeeded' => false,
        ]
    );

});


我的 app / Http / Controllers / ApplicationController.php ,它返回找不到应用程序错误,看起来像这样:

    public function application(string $locale,  \App\Application $application)
{
    return view(
        'application.application.main',
        [
            'application' => $application,
            'isLanguageNeeded' => false,
        ]
    );
}

routes / web.php

Route::get('/application/{locale}/{application}', 'ApplicationController@application');

2 个答案:

答案 0 :(得分:1)

只需重新创建一个项目。方法和其他使用的虚拟名称。

在ApplicationsController中,我添加了:

`public function index(string $locale, \App\Application $application)
{
  dd('here');
}`

在网络路线中:     Route::get('applications/{locale}/{application}', 'ApplicationsController@index');

在应用程序模型中:

public function getRouteKeyName() : string { return 'token'; }

然后php artisan servehttp://127.0.0.1:8000/applications/el/test1中 我得到了正确的答案,你可以尝试显式绑定 https://laravel.com/docs/5.7/routing#explicit-binding

还请注意,找不到记录时将使用404响应。例如,如果我没有带有test1令牌的应用,则会得到404;

希望对您有帮助。

答案 1 :(得分:0)

Laravel自动将请求作为第一个参数传递给控制器​​...因此,您应像这样编辑控制器:

Intent