使用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,但我只是想知道为什么这是必要的。首先不应该正确生成路线吗?
答案 0 :(得分:1)
您可以像这样使用它:
Route::resource('skus', 'SkusController')->parameters(['skus' => 'sku']);
它可以在Route模型绑定中使用。喜欢
public function update(Request $request, Sku $sku)
{
$sku->update(); // data to be updated
}
其中Sku将是您的型号名称。