Laravel资源路由被分配了错误的参数名称

时间:2018-04-23 22:27:50

标签: php laravel

使用Laravel 5.6,我使用以下命令生成资源控制器:

php artisan make:controller SkusController --resource --model=Sku

生成的控制器文件具有正确的类型提示方法。例如:

<?php

namespace App\Http\Controllers;

use App\Sku;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class SkusController extends Controller
{
    /**
     * Display the specified resource.
     *
     * @param  \App\Sku  $sku
     * @return \Illuminate\Http\Response
     */
    public function show(Sku $sku)
    {
        //
    }
}

现在,我将一条资源路由添加到我的路由文件中,如下所示:

Route::resource('skus', 'SkusController');

但是,在我的路由列表中,这些路由中的命名参数显示为skus,而不是sku,导致路由模型绑定无效。控制器方法中的$sku变量为空。

例如,这是show输出中php artisan route:list方法条目的URI:

skus/{skus}

或者,我对products资源执行了相同的过程,并且URI是正确的:

products/{product}

在这种情况下,路由模型绑定按预期工作,因为控制器变量被称为$product

我想我可以manually change the parameter name,但我只是想知道为什么这是必要的。首先不应该正确生成路线吗?

1 个答案:

答案 0 :(得分:1)

您可以像这样使用它:

Route::resource('skus', 'SkusController')->parameters(['skus' => 'sku']);

它可以在Route模型绑定中使用。喜欢

public function update(Request $request, Sku $sku)
    {
        $sku->update(); // data to be updated
    }

其中Sku将是您的型号名称。