在控制器中获取删除 ID 以删除 mysql 记录
Get delete id in controller to delete mysql record
我在 AuthController 中有这个:
public function DelFunc() {
if(Auth::check() === true) {
$deleted = DB::delete('delete from funcionarios where id = ?',[$id]);
}
return redirect()->route('admin.login');
}
但我得到这个错误:未定义的变量:id
我有这个按钮:
<a href="../admin/delFunc?id={{$empresa->id}}">
<button class="btn btn-primary">Delete</button>
</a>
我知道我的问题很简单,但是,如何获取 AuthController 上的 id 值来删除这条记录?
我也有这条路线:
Route::get('/admin/delFunc', [App\Http\Controllers\AuthController::class, 'delFunc'])->name('delFunc');
而不是 [$id]
使用 [request('id')]
这里有一堆危险信号:
- 为什么在使用
Funcionario
对象时会进入名为 AuthController
的控制器?
- 为什么直接数据库查询而不是使用 Eloquent 模型?
- 您不应该通过 GET 方法删除项目,这是非常危险的。
- 身份验证将由中间件完成,而不是通过在每个控制器方法中进行检查。
- 最后,您的方法还应该有一个更常规的名称,例如
destroy
。
路由参数在路由定义中用大括号定义,如“/admin/delete/{func}”,然后绑定到控制器方法定义中的对象。
所以,将所有这些放在一起,应该是这样的:
<?php
use App\Http\Controllers\FuncionarioController;
use Illuminate\Support\Facades\Route;
Route::middleware("auth")->group(function ($router) {
$router->delete('/funcionario/{func}', [FuncionarioController::class, 'destroy'])
->name('funcionario.destroy');
});
然后在你的控制器中:
<?php
namespace App\Http\Controllers;
use App\Models\Funcionario;
class FuncionarioController extends Controller {
public function destroy(Funcionario $func)
{
$func->delete();
return redirect()
->route('admin.login')
->with('success', __('Funcionario deleted'));
}
}
假设您的值在 $id
变量中传递,您的视图将如下所示:
<form method="post" action="{{ route("funcionario.destroy", $id) }}">
@method('DELETE')
@csrf
<button type="submit">{{ __("Delete") }}</button>
</form>
我在 AuthController 中有这个:
public function DelFunc() {
if(Auth::check() === true) {
$deleted = DB::delete('delete from funcionarios where id = ?',[$id]);
}
return redirect()->route('admin.login');
}
但我得到这个错误:未定义的变量:id
我有这个按钮:
<a href="../admin/delFunc?id={{$empresa->id}}">
<button class="btn btn-primary">Delete</button>
</a>
我知道我的问题很简单,但是,如何获取 AuthController 上的 id 值来删除这条记录?
我也有这条路线:
Route::get('/admin/delFunc', [App\Http\Controllers\AuthController::class, 'delFunc'])->name('delFunc');
而不是 [$id]
使用 [request('id')]
这里有一堆危险信号:
- 为什么在使用
Funcionario
对象时会进入名为AuthController
的控制器? - 为什么直接数据库查询而不是使用 Eloquent 模型?
- 您不应该通过 GET 方法删除项目,这是非常危险的。
- 身份验证将由中间件完成,而不是通过在每个控制器方法中进行检查。
- 最后,您的方法还应该有一个更常规的名称,例如
destroy
。
路由参数在路由定义中用大括号定义,如“/admin/delete/{func}”,然后绑定到控制器方法定义中的对象。
所以,将所有这些放在一起,应该是这样的:
<?php
use App\Http\Controllers\FuncionarioController;
use Illuminate\Support\Facades\Route;
Route::middleware("auth")->group(function ($router) {
$router->delete('/funcionario/{func}', [FuncionarioController::class, 'destroy'])
->name('funcionario.destroy');
});
然后在你的控制器中:
<?php
namespace App\Http\Controllers;
use App\Models\Funcionario;
class FuncionarioController extends Controller {
public function destroy(Funcionario $func)
{
$func->delete();
return redirect()
->route('admin.login')
->with('success', __('Funcionario deleted'));
}
}
假设您的值在 $id
变量中传递,您的视图将如下所示:
<form method="post" action="{{ route("funcionario.destroy", $id) }}">
@method('DELETE')
@csrf
<button type="submit">{{ __("Delete") }}</button>
</form>