【问题标题】:Resource route generating strange model name from an 'ax' ending model资源路径从“ax”结尾模型生成奇怪的模型名称
【发布时间】:2017-01-02 15:35:15
【问题描述】:

我注册了这个资源:

Route::resource('order-item-paxes', 'OrderItemPaxController', ['except' => ['show', 'create', 'store']]);

问题是我无法让控制器中的模型这样做:

public function edit(OrderItemPax $order_item_pax)
{
    $order_item_pax = OrderItemPax::find($id);    
    return view('production.order-item-paxes.edit', compact('order_item_pax'));
}

$order_item_pax->toArray() 返回一个空数组。

我通过 php artisan route:list 检查了路线,它返回了一些奇怪的东西:

PUT|PATCH | production/order-item-paxes/{order_item_paxis}

应该是 order_item_pax 而不是 order_item_paxis。

有什么想法吗?

更新

如果我在我的控制器中使用 $order_item_paxis,它就可以工作。我已经注册了数百个资源,而且我一直使用单数版本的名称

【问题讨论】:

  • 我实际上认为我知道这个问题。在 Symfony 中有一个名为 Inflector (github.com/symfony/inflector/blob/master/Inflector.php) 的类,它有一个名为 'singularize' 的方法。我相信“paxes”会以“paxis”的形式出现。例如。轴将成为轴。我坚信这就是您的路线正在发生的事情。
  • 我认为你必须手动执行:['names' => ['update' => 'order-item-paxes']]);

标签: php laravel model-binding


【解决方案1】:

你可以通过在 $options 数组(第三个参数)中包含参数数组来告诉 Laravel 覆盖路由参数:

Route::resource('order-item-paxes', 'OrderItemPaxController', [
    'except' => ['show', 'create', 'store'],
    'parameters' => ['order-item-paxes' => 'order_item_pax']
]);

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    • 2014-03-31
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    相关资源
    最近更新 更多