【问题标题】:L5 Form Model Binding with multiple ParameterL5 表单模型绑定多参数
【发布时间】:2016-04-27 09:10:48
【问题描述】:

如何制作具有多个参数的 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工匠路线:列表

【问题讨论】:

    标签: php forms laravel laravel-5.2


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      看起来您应该使用“嵌套资源”(根据需要调整命名)

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

      路线(表演):

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

      Laravel Docs - Nested Resource Controllers

      【讨论】:

      • 我的路线没有问题...我只是对表单模型绑定的 Form::model 有问题
      【解决方案3】:

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

      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-&gt;id 应该是:$product-&gt;id

      【讨论】:

      • 这只是错字:x,我已经更新了我的路线。我正在使用 Route::resource。我在普通表单上没有问题,除非我使用 Laravelcollective HTML/Form : Form::model
      • 如果您使用的是路线资源,请运行artisan route:list 以获取正确的路线名称,我很确定它不是product.{product}.product-attributes.update
      • 已解决,但如果您询问我的路线:列表来证明我的路线,您可以看到我的更新@haakym
      • 谢谢,没有意识到你可以有一个包含 {} 的路由名称,或者至少它是这样生成的
      猜你喜欢
      • 2017-01-10
      • 2021-05-11
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-02
      • 2016-06-11
      相关资源
      最近更新 更多