具有多个参数的 L5 表单模型绑定

L5 Form Model Binding with multiple Parameter

如何使Form::model有多个参数? 我有这样的示例路线。 www.domain.com/product/2/product-attributes/3/edit 在正常情况下,我可以这样做:

<form method="POST" action="{{ route('product.{product}.product-attributes.update', [$product->id, $product-attribute->id ]) }}"> </form>

但如果我尝试像这样使用 laravelcolective/html Form::model():

Form::model($productattributes, array('method' => 'POST', array('route' => array('product.{product}.product-attributes.update', [$product->id, $product-attribute->id ])))

我得到一个数组到字符串转换的错误...

====更新==============

我的路线:

Route::resource('backend/product', 'Backend\ProductController');
Route::resource('backend/product/{product}/product-attributes', 'Backend\ProductAttributesController',['except' => ['index']]);

===== 更新 2 =========================

已经解决,但我会证明我的路线没有错 php artisan route:list

首先,我从来没有见过像你这样的带有 curly 大括号的路由名称:

product.{product}.product-attributes.update

不确定这样做的目的是什么?也许您可以与我们分享您的路线?

对我来说我会这样做...

假设你有一条路线:

Route::get('product/{product_id}/product-attributes/{product_atrribute_id}/edit',[
    'as'   => 'product.product-attributes.update',
    'uses' => 'ProductController@updateProduct',

]);

然后你可以这样调用你的路由方法:

route('product.product-attributes.update', 
    ['product_id' => product->id, 'product_atrribute_id' => $product-attribute->id ]
)

这里的区别(你调用方法的方式和我调用方法的方式)是我指定了与 url.

中的键匹配的数组键

至于打开表格,我想你会这样做 link 这个:

(请注意我做了一些假设,因为您没有分享太多代码)

Form::model( 
    // pass it the product so the product id can be accessed directly 
    // and the attributes id can be accessed through relationship method
    $product, 
    [
        'method' => 'POST', [
            'route' => [
                'product.product-attributes.update', [
                    'product_id' => $product->id, 
                    'product_attributes_id' => $product->attribute->id
                ]
            ]
        ]
    ]
)

请注意您的代码中的错误:product->id 应该是:$product->id

您似乎应该使用 'nested resource'(根据需要调整命名)

Route::resource('backend/product.attributes', 'Backend\ProductAttributesController',['except' => ['index']]);

路线(显示):

backend/product/{product}/attributes/{attributes}

Laravel Docs - Nested Resource Controllers

我只是在尝试..如果正常路由使用数组传递多个参数。我想 Form::model 不需要使用数组,只需将 ,

分开即可

正常路线::

<form method="POST" action="{{ route('product.{product}.product-attributes.update', [$product->id, $product-attribute->id ]) }}"> </form>

表单模型::

Form::model($productattributes, array('method' => 'POST', array('route' => array('product.{product}.product-attributes.update', $product->id, $product-attribute->id)))