Laravel 5.1 url值未传递给控制器​​PUT方法

时间:2015-09-02 16:00:46

标签: php laravel laravel-routing laravel-5.1

我有一个更新图书信息的简单表格。

<form action="{{ action('BookController@update') }}" method="POST" class="form-horizontal">

  <input type="text" id="title" class="form-control" name="title" placeholder="title" value="{{ $book[0]->title }}">

  <input type="text" id="author" class="form-control" name="author" placeholder="author" value="{{ $book[0]->author }}">
      ......................

  <button type="submit" class="btn btn-primary">Save</button>

  <input type="hidden" name="_method" value="PUT">

  <input type="hidden" name="_token" value="{{ csrf_token() }}" />

</form>

控制器:

public function update(Request $request, $id)
{
    $book = new Book;

    $title      = $request->input('title');
    $author     = $request->input('author');
    $category   = $request->input('category');
    $date       = $request->input('date');

    if ($book->updateBook($id, $title, $author, $category, $date)) {
        return redirect('books')->with('status', 'Successfuly edited!');
    }
    else {
        return dd($id);
    }
}

问题是,它没有通过正确的$ id。它传递一个字符串{books}

基本上$id = "{books}"

它应该是来自网址/books/31/edit

的整数(31)

在路由中定义为具有所有可用默认方法的资源 我该怎么办?

3 个答案:

答案 0 :(得分:1)

您需要在表单定义中传递本书的ID,作为action()的第二个参数:

<form action="{{ action('BookController@update', ['id' => $book[0]->id]) }}" method="POST" class="form-horizontal">

有关详细信息,请参阅definition of action()

答案 1 :(得分:0)

解决方案非常简单:我只需要将$ id传递给视图,然后将其传递给@EricMakesStuff建议的表单动作。

答案 2 :(得分:-1)

试试这个

<form action="{{ action('BookController@update', ['id'=> 1]) }}" method="POST" class="form-horizontal">