Laravel路由返回404错误:新增路由后原有store路由失效
排查Laravel Store路由重定向404问题
看起来你的核心问题不是store路由本身返回404,而是执行完store方法后的重定向步骤触发了404——从Chrome的网络请求可以看到,store请求返回的是302(重定向),说明控制器的store方法已经执行,只是跳转的目标页面找不到。结合你给出的信息,我整理了几个关键排查点:
1. 检查edit路由的定义是否匹配重定向参数
你的store方法最后执行了这个重定向:
return redirect()->action('RentalAgreementController@edit', ['customer' => $customer, 'rentalAgreement' => $rentalAgreement]) ->with('alert', 'Rental agreement created.');
这里传递了两个参数:customer和rentalAgreement,但你没有给出edit路由的定义。如果edit路由的参数不匹配,就会导致重定向到不存在的URL。
- 如果你期望
edit路由同时接收customer和rentalAgreement参数,路由应该定义成这样:Route::get('rental_agreements/{customer}/{rentalAgreement}/edit', 'RentalAgreementController@edit'); - 如果
edit路由只需要rentalAgreement参数(比如通过关联关系获取customer),那你需要修改重定向的参数:return redirect()->action('RentalAgreementController@edit', ['rentalAgreement' => $rentalAgreement]) ->with('alert', 'Rental agreement created.');
2. 验证重定向生成的URL是否有效
可以在store方法里临时添加调试代码,查看生成的重定向URL是否正确:
// 在create之后、redirect之前添加 $redirectUrl = action('RentalAgreementController@edit', ['customer' => $customer, 'rentalAgreement' => $rentalAgreement]); dd($redirectUrl); // 打印生成的URL,然后对比路由列表
然后运行php artisan route:list,确认这个URL是否对应一个存在的GET路由。
3. 排查路由模型绑定的潜在问题
之前出现的Class App\Http\Controllers\RentalAgreement does not exist错误,可能和路由参数的模型绑定有关:
- 确保你的
RentalAgreement模型在App命名空间下(控制器里已经use App\RentalAgreement;,这部分没问题)。 - 检查路由参数名是否和模型名对应:比如
{rentalAgreement}会自动绑定App\RentalAgreement,如果参数名写错(比如全小写{rentalagreement}),可能导致绑定失败,但你的新增路由能正常工作,这部分应该没问题。
4. 再次清理缓存确保路由生效
虽然你已经执行过清理操作,但再重复一次确保没有残留缓存:
php artisan route:clear composer dump-autoload php artisan cache:clear
5. 确认表单提交的参数是否完整
你提到“移除请求参数后可运行至资源保存步骤”,这里的请求参数应该是指RentalAgreementRequest的验证规则。可以临时把store方法的参数换成普通的Request,确认是否能正常重定向:
public function store(Request $request, Customer $customer) { // 暂时跳过验证,测试重定向 $rentalAgreement = RentalAgreement::create($request->all()); return redirect()->action('RentalAgreementController@edit', ['customer' => $customer, 'rentalAgreement' => $rentalAgreement]) ->with('alert', 'Rental agreement created.'); }
如果这样能正常跳转,说明RentalAgreementRequest的验证规则可能有隐藏问题,但根据你描述“执行到请求处理后返回时触发404”,验证应该是通过了,所以这个可能性较低。
内容的提问来源于stack exchange,提问作者S P
相关产品推荐
相关产品推荐

