HTML表单提交到Laravel api.php路由出现连接错误如何解决?
错误触发原因
你遇到的是Laravel的419 PAGE EXPIRED错误,触发原因有两个:
- 路由前缀不匹配:Laravel 中定义在
routes/api.php内的路由默认会自动加上/api前缀,你当前表单提交的地址https://www.aspireelearning.com/summitRegistration缺少该前缀,请求实际匹配到了web中间件组的路由规则,而web中间件默认开启CSRF跨站请求伪造校验。 - 表单未携带CSRF令牌:如果你的路由实际定义在
web.php中,提交表单时没有携带Laravel要求的CSRF校验令牌,也会直接触发该错误。
解决方案
根据你的使用场景二选一即可:
方案1:保留路由在api.php(适合静态表单、前后端分离场景)
直接修改HTML表单的action属性,加上/api前缀即可:
<form action="https://www.aspireelearning.com/api/summitRegistration" method="POST">
api路由组默认不开启CSRF校验,修改后即可正常提交数据。
方案2:路由移至web.php(适合Laravel后端渲染的同域表单场景)
- 将你
api.php中的这条路由代码移动到routes/web.php文件中:
Route::post('summitRegistration',[PageController::class,'summitRegistration']);
- 在表单内部添加CSRF令牌隐藏字段,如果是Blade模板渲染的表单,直接添加如下代码:
<input type="hidden" name="_token" value="{{ csrf_token() }}">
额外注意
你当前表单内的国家选择框所有option的value属性都为空,后续提交时国家字段会拿到空值,建议修改为对应国家的标识值:
<option value="USA">USA</option> <option value="UK">UK</option>
内容的提问来源于stack exchange,提问作者azim
相关产品推荐
相关产品推荐

