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

时间:2016-01-21 08:09:19

标签: php forms laravel laravel-5.2

如何使用多个参数制作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 enter image description here

3 个答案:

答案 0 :(得分:3)

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

普通路线::

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

Form Model ::

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

答案 1 :(得分:1)

首先,我从未见过像你这样的花括号的路线名称:

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中的键匹配的数组键。

至于打开表格,我认为你会把它联系起来:

(请注意我已经做了一些假设,因为你没有共享很多代码)

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

答案 2 :(得分:0)

看起来你应该使用一个嵌套资源&#39; (根据需要调整命名)

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

路线(显示):

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

Laravel Docs - Nested Resource Controllers