Laravel搜索功能无错误提示却报404问题排查及低改动修复
Laravel搜索功能出现404错误排查与修复
我尝试在Laravel中从名为pegawai的数据表按名称搜索数据,但点击搜索后页面显示404 Not Found,无其他错误提示。以下是我的代码:
路由代码
Route::get('/pegawai/cari', 'PegawaiController@cari');
Pegawai控制器代码
public function cari(Request $request) { // 捕获搜索数据 $cari = $request->cari; // 根据搜索条件从pegawai表获取数据 $pegawai = DB::table('pegawai') ->where('pegawai_nama', 'like', "%" . $cari . "%") ->paginate(10); // 将数据传递到index视图 return view('index',['pegawai' => $pegawai]); }
index视图代码
<form action="/pegawai/cari" method="GET"> <input type="text" name="cari" placeholder="Cari Pegawai .." value="{{ old('cari') }}"> <input type="submit" value="CARI"> </form>
请问我哪里出错了?如何在尽量少改动代码的情况下实现想要的搜索结果?
可能的错误原因及修复方案
1. 路由顺序冲突
Laravel路由按定义顺序匹配,若/pegawai/cari路由写在/pegawai/{id}这类通配符路由之后,请求会优先匹配通配符路由,把cari当作{id}参数,导致找不到对应处理方法,返回404。
修复:将Route::get('/pegawai/cari', 'PegawaiController@cari');移至所有/pegawai/*的动态路由之前。
2. 控制器命名空间错误(Laravel 8+)
Laravel 8及以上版本默认不再自动导入控制器命名空间,若路由中仅写'PegawaiController@cari',框架会找不到控制器,返回404。
修复:在路由文件顶部添加命名空间引用,改用类方法写法:
use App\Http\Controllers\PegawaiController; Route::get('/pegawai/cari', [PegawaiController::class, 'cari']);
3. 路由缓存未更新
若之前执行过php artisan route:cache,修改路由后未清除缓存,旧路由规则仍会生效,新路由无法被识别。
修复:执行命令清除路由缓存:
php artisan route:clear
最小改动修复建议
优先调整路由顺序,确保搜索路由在动态路由之前;若使用Laravel 8+,更新路由写法为类引用格式,这两步改动最小,能解决绝大多数404问题。
内容的提问来源于stack exchange,提问作者J3ubble Marsyal
相关产品推荐
相关产品推荐

