Переменная Laravel из метода Form в Controller через Route - PullRequest
0 голосов
/ 08 декабря 2018

Я пытаюсь обновить редактирование поста без использования ресурса.Я попытался проанализировать переменную из моей формы в мой маршрут, используя {id}, но он игнорируется.Это форма, которую я пытаюсь опубликовать.

{!! Form:: open(['action'=> ['ManageBooksController@updateBook', $book->id], 'method' => 'POST']) !!}
<div class="form-group">
  {{Form::label('Book_NAME', 'Name')}}
  {{Form::text('Book_NAME', $book->Book_NAME, ['class' => 'form-control', 'placeholder' => 'Name'])}}
</div>
{{Form::hidden('_method', PUT)}}
{{Form::submit('Submit', ['class'=>'btn btn-primary'])}}
{!!Form:: close() !!}

Это мой маршрут

Route::put('manageBooks', 'ManageBooksController@updateBook');

Это мой метод в моем контроллере

public function updateBook(Request $request, $id)
{

    $this->validate($request, ['Book_NAME' => 'required']);

    $books = Books::find($id);
    $books->Book_NAME =$request->input('Book_NAME');
    $books->save();

    return redirect('/manageBook')->with('success', 'Book Edited');
}

Ответы [ 6 ]

0 голосов
/ 08 декабря 2018

Измените ваш метод POST на PUT в вашем первом,

{!! Form:: open(['action'=> ['ManageBooksController@updateBook', $book->id],'method' => 'PUT']) !!}
<div class="form-group">
    {{Form::label('Book_NAME', 'Name')}}
    {{Form::text('Book_NAME', $book->Book_NAME, ['class' => 'form-control', 'placeholder' => 'Name'])}}
</div>
{{Form::submit('Submit', ['class'=>'btn btn-primary'])}}
{!!Form:: close() !!}

Затем вы должны передать параметр в вашем маршруте, так как ваш метод ожидает $ id

Route::put('manageBooks/{id}/update', 'ManageBooksController@updateBook');
0 голосов
/ 08 декабря 2018

В конце я добавил еще одно скрытое поле, в котором я анализирую идентификатор сообщения, которое я редактирую.Я также изменил метод find для получения переменной запроса, указывающей на идентификатор.

Моя форма:

{{Form::hidden('Book_ID', $book->Book_ID)}}
{{Form::hidden('_method', PUT)}}
{{Form::submit('Submit', ['class'=>'btn btn-primary'])}}
{!!Form:: close() !!}

Моя функция:

public function updateBook(Request $request)
{

$this->validate($request, ['Book_NAME' => 'required']);

$books = Books::find($request->Book_ID);
$books->Book_NAME =$request->input('Book_NAME');
$books->save();

return redirect('/manageBook')->with('success', 'Book Edited');
}
0 голосов
/ 08 декабря 2018

Обновление без использования ресурса:

ваш маршрут:

Route::get('/manageBooks', 'ManageBooksController@whateverer')->name('manageBooks');

Route::post('/manageBooks/{id}/edit', 'ManageBooksController@updateBook')->name('updateBook');

ваш клинок:

{!! Form:: open(['route'=> ['updateBook', $book->id], 'method' => 'POST']) !!}
<div class="form-group">
  {{Form::label('Book_NAME', 'Name')}}
  {{Form::text('Book_NAME', $book->Book_NAME, ['class' => 'form-control', 'placeholder' => 'Name'])}}
</div>
{{Form::hidden('id', $book->id)}} //hidden field is not required
{{Form::submit('Submit', ['class'=>'btn btn-primary'])}}
{!!Form:: close() !!}

ваш контроллер:

public function updateBook(Request $request, $id)
{

    $this->validate($request, ['Book_NAME' => 'required']);

    $books = Books::where('id',$id)->update(['Book_NAME'=>$request->Book_NAME]);
    return redirect()->route('manageBooks')->with('success', 'Book Edited');
}
0 голосов
/ 08 декабря 2018

Если вы хотите использовать Маршрут, вам необходимо указать следующие особенности:

{!! Form:: open(['route'=> ['manage_book', $book->id], 'method' => 'POST']) !!}

В вашем маршруте вам может потребоваться правильно назвать его

Route::post('/manageBooks/{id}', array('as'=>'manage_book','uses'=>'ManageBooksController@updateBook'));

Надеюсь, это поможет.

0 голосов
/ 08 декабря 2018

Рассмотрим изменение последовательности аргументов функции:

public function updateBook($id, Request $request)  // Notice the sequence of the arguments
{
    ......
}
0 голосов
/ 08 декабря 2018

Ваш маршрут ожидает PATCH.Попробуйте обновить маршрут до:

Route::post('/manageBooks/{id}', 'ManageBooksController@updateBook');

Или включите @method('PATCH') Laravel в вашу форму.

Кроме того, имена ваших контроллеров не совпадают:)

...