[英]Laravel route pass variable to controller not same
我發現了另一個錯誤。 我試圖按ID刪除圖書。 我有數據
--------------
| id | name |
--------------
| 1 | book1 |
| 2 | book2 |
| 3 | book3 |
因此,當我刪除ID為2的書時,控制器始終會收到ID3。當我嘗試刪除ID為1時,情況仍然如此,控制器會獲得ID 3(總是最后一條記錄)
此視圖刀片
@foreach($datas as $data)
<a href="# {{ $data->id }}"
onclick="event.preventDefault();
document.getElementById('remove-form').submit();"
rel="tooltip" title="Hapus" class="btn btn-danger">
</a>
<form id="remove-form" action="{{ url('/dashboard/book/delete/'. $data->id) }}" method="post">
{{ csrf_field() }}
{{ method_field('DELETE') }}
</form>
@endforeach
這條路線
Route::group(['namespace' => 'Backend'], function ()
{
Route::resource('/dashboard/book', 'BookController'); //
Route::delete('/dashboard/book/delete/{id}', 'BookController@destroy');
}
這個控制器
public function index()
{
$datas = Book::all();
return view('backend.bookview', compact('datas'));
}
public function destroy($id)
{
Book::where('id', $id)->delete();
return redirect('/dashboard/book')->with('ok', translate('back/book.destroyed'));
}
UPDATE
單個html頁面上不能有多個id remove-form
。 而是使用這樣的類:
@foreach($datas as $data)
<div class="delete-block">
<a href="# {{ $data->id }}"
rel="tooltip" title="Hapus" class="btn btn-danger delete-btn">
</a>
<form class="remove-form" action="{{ url('/dashboard/book/delete/'. $data->id) }}" method="post">
{{ csrf_field() }}
{{ method_field('DELETE') }}
</form>
</div>
@endforeach
並且您的腳本應為:
$(function() {
$('.delete-btn').on('click', function(e) {
$(this).closest('.delete-block').find('form').submit();
});
});
$(function() { $('.delete-btn').on('click', function(e) { e.preventDefault(); console.log($(this).closest('.delete-block').find('form').attr('action')); // $(this).closest('.delete-block').find('form').submit(); }); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="delete-block"> <a href="#1" rel="tooltip" title="Hapus" class="btn btn-danger delete-btn"> Delete 1 </a> <form id="remove-form" action="/dashboard/book/delete/1" method="post"> <input type="hidden"> </form> </div> <div class="delete-block"> <a href="#2" rel="tooltip" title="Hapus" class="btn btn-danger delete-btn"> Delete 2 </a> <form id="remove-form" action="/dashboard/book/delete/2" method="post"> <input type="hidden"> </form> </div> <div class="delete-block"> <a href="#3" rel="tooltip" title="Hapus" class="btn btn-danger delete-btn"> Delete 3 </a> <form id="remove-form" action="/dashboard/book/delete/3" method="post"> <input type="hidden"> </form> </div>
內部控制器
您應該通過從數據庫中按ID提取單個記錄來刪除圖書,如下所示:
public function destroy($id)
{
$book = Book::find($id);
if($book) {
$book->delete();
return redirect('/dashboard/book')->with('ok', translate('back/book.destroyed'));
}
// return error response - book deletion failed!
return redirect('/dashboard/book')->with('Error', translate('back/book.destroyed.error'));
}
使用find()
通過primary key
從數據庫中獲取單個記錄。
但是,如果您知道模型的主鍵,則可以刪除模型而不檢索它。 為此,請調用destroy方法:
Book::destroy(1); // Can pass single primary key
Book::destroy([1, 2, 3]); // Can pass an array of primary keys
Book::destroy(1, 2, 3); // Can pass multiple primary keys via arguments
查看有關在Laravel中刪除模型的更多信息
希望這可以幫助!
發生這種情況是因為document.getElementById('remove-form').submit()
總是選擇id
=> 3
的最后一個表單。
因此,將其更改為以下代碼即可使用:
@foreach($datas as $data)
<form method="POST" action="{{ url('/dashboard/book/delete/'. $data->id) }}" style="display: inline-block;">
{{ csrf_field() }}
{{ method_field('DELETE') }}
<button onclick="return confirm('Do you really want to delete this item?');" type="submit" class="btn btn-danger" data-original-title="Delete Item" data-toggle="tooltip" data-placement="top" title="">
Delete
</button>
</form>
@endforeach
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.