具有多个参数的 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}
我只是在尝试..如果正常路由使用数组传递多个参数。我想 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)))
如何使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}
我只是在尝试..如果正常路由使用数组传递多个参数。我想 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)))