更新资源时获取模型ID

时间:2014-05-18 18:16:18

标签: laravel

我有一个表单,它会向控制器的更新方法提交补丁请求。 但是更新方法需要有$ id,正如你在下面尝试我得到的那样你可以看到 No query results for model [Item].由于更新方法未收到模型的$ id

public function update($id)
    {
        $item = Item::findOrFail($id);
        $update = Input::all();
            // some codes to save changes

        return Redirect::route('items.index');
    }

另一件事是,每当我提交表单时,url就变成这样的东西:

mw.dev/items/%7Bitems%7D


修改

routes.php文件

Route::resource('items','ItemsController');

ItemController

public function edit($id)
    {
        $item = Item::findOrFail($id);
        return View::make('items.edit')->with('item',$item);
    }

我已将代码包含在 edit.blade.php

{{Form::open(array('route' => 'items.update', 'method'=>'patch'))}}
    {{Form::text('barcode', $item->barcode, array('placeholder' => 'barcode'))}}
    {{Form::text('imei',$item->imei, array('placeholder' => 'imei'))}}
    {{Form::text('item_name', $item->item_name, array('placeholder' => 'item name'))}}
    {{Form::submit('edit')}}
{{Form::close()}}

2 个答案:

答案 0 :(得分:1)

您必须将模型传递给视图,并在生成表单时需要传递id参数。假设您有一个User模型,并且该模型在视图中可用。因此,您可以使用以下内容生成表单操作:

// Using Form::open method with route
Form::open(array('route' => array('route.name', $user->id)))

// Using Form::model method with route
Form::model($user, array('route' => array('route.name', $user->id), 'method' => 'patch'))

// Using Form::open method with action
Form::open(array('action' => array('Controller@update', $user->id), 'method' => 'patch'))

// Using Form::open method with url
Form::open(array('url' => 'something/update/' . $user->id, 'method' => 'patch'))

Opening A Form上查看更多内容。

答案 1 :(得分:0)

网址

mw.dev/items/%7Bitems%7D

很可能是

的网址编码形式
mw.dev/items/{items}

我认为表单提交或<form>的{​​{1}}个参数或action Route::*声明中存在问题。

这也可以解释为什么在提交时没有得到任何routes.php