即使在锚标记的 href 中设置了正确的 id,我的控制器也将 id 放在后面
Even though the correct id is set in the href of the anchor tag, my controller takes an id one behind
我有什么
blade.php 文件
<form action="cars/{{ $car->id }}" method="POST" class="pt-3">
@csrf
@method('delete')
<button
type="submit"
class="border-b-2 pb-2 border-dotted italc text-red-500"
>
Delete →
</button>
</form>
Laravel
中的控制器
public function destroy($id)
{
$car = Car::find($id)->first();
$car->delete();
return redirect('/cars');
}
问题
上面的controller,总是删除db中后一个id的记录。
例如请求中发送的id为14,控制器删除id为13的记录
我想提及的与此问题相关的另外两个重要细节是,
-> 我仔细检查了请求发送到的 url 并且 url 拥有正确的 ID。
所以它必须是失败的控制器。
-> 即使上面的控制器代码不起作用,下面的代码也能正常工作
很好。
public function destroy(Car $car)
{
$car->delete();
return redirect('/cars');
}
我不明白为什么我在“Laravel 中的控制器”下键入的代码不起作用,而我直接在上面键入的代码却起作用。
routes/web.php
Route::get('cars', [App\Http\Controllers\CarsController::class, 'index'])->name('cars');
Route::get('cars/{id}/delete', [App\Http\Controllers\CarsController::class, 'destroy'])->name('cars.destroy');
blade.php 文件
我确实在路由中添加了表单操作。
<form action="{{route('cars.destroy', $car->id)}}" method="POST" class="pt-3">
@csrf
@method('DELETE')
<button type="submit" class="border-b-2 pb-2 border-dotted italc text-red-500"> Delete →</button>
</form>
控制器文件
将 find 替换为 findOrFail 并删除 first()
。最后使用 $request->id
.
获取 id
public function destroy(Request $request) {
$car = Car::findOrFail($request->id);
$car->delete();
return redirect()->route('cars');
}
我有什么
blade.php 文件
<form action="cars/{{ $car->id }}" method="POST" class="pt-3">
@csrf
@method('delete')
<button
type="submit"
class="border-b-2 pb-2 border-dotted italc text-red-500"
>
Delete →
</button>
</form>
Laravel
中的控制器public function destroy($id)
{
$car = Car::find($id)->first();
$car->delete();
return redirect('/cars');
}
问题
上面的controller,总是删除db中后一个id的记录。 例如请求中发送的id为14,控制器删除id为13的记录
我想提及的与此问题相关的另外两个重要细节是,
-> 我仔细检查了请求发送到的 url 并且 url 拥有正确的 ID。
所以它必须是失败的控制器。
-> 即使上面的控制器代码不起作用,下面的代码也能正常工作
很好。
public function destroy(Car $car)
{
$car->delete();
return redirect('/cars');
}
我不明白为什么我在“Laravel 中的控制器”下键入的代码不起作用,而我直接在上面键入的代码却起作用。
routes/web.php
Route::get('cars', [App\Http\Controllers\CarsController::class, 'index'])->name('cars');
Route::get('cars/{id}/delete', [App\Http\Controllers\CarsController::class, 'destroy'])->name('cars.destroy');
blade.php 文件
我确实在路由中添加了表单操作。
<form action="{{route('cars.destroy', $car->id)}}" method="POST" class="pt-3">
@csrf
@method('DELETE')
<button type="submit" class="border-b-2 pb-2 border-dotted italc text-red-500"> Delete →</button>
</form>
控制器文件
将 find 替换为 findOrFail 并删除 first()
。最后使用 $request->id
.
public function destroy(Request $request) {
$car = Car::findOrFail($request->id);
$car->delete();
return redirect()->route('cars');
}