全栈David
1/8/2025
嘿,大家好!👋
我最近在搞一个 Laravel 9.x 的项目,PHP 8.2。这个项目有个 API 用来接收来自 Form Assembly 表单的数据。表单的数据是通过 application/x-www-form-urlencoded
发送的。问题来了:如果有个错误,比如验证错误,Laravel 不会返回错误响应,而是像处理网页数据一样,试图重定向到主页。😩
我知道如果数据是 application/json
格式的话,一切都很顺利。但问题是,Form Assembly 不支持这种格式。这就让调试变得超级困难,因为没有错误响应可以参考。Laravel Daily 在这方面有个很棒的视频解释 这里,但我找不到关于 application/x-www-form-urlencoded
数据的解决方案。
我已经试过在控制器里手动捕获异常,甚至尝试修改中间件,但都没啥效果。有没有大佬能给点建议,或者有啥其他的解决方案吗?🙏
这是我的控制器和请求验证代码:
// ApplicationsController.php class ApplicationsController extends Controller { use HasApplicationEmail, EmailsTrait; public function store(CreateApplicationRequest $request) { // ... 处理请求逻辑 ... } } // CreateApplicationRequest.php class CreateApplicationRequest extends FormRequest { public function rules() { return [ 'email' => ['required', 'email'], 'event_slug' => ['required'], 'application_fee' => ['required', 'numeric'], 'applicant_birthdate' => ['required'], 'applicant_gender' => ['required'], 'marital_status' => ['required'], 'applicant_street_1' => ['required'], 'applicant_city' => ['required'], 'applicant_state_province' => ['required'], 'applicant_zip' => ['required'], 'applicant_country' => ['required'], 'applicant_phone' => ['required'], 'transaction_number' => ['required'], ]; } public function authorize() { return true; } }
PS: 我真的快被这个问题逼疯了,求各位大佬救救孩子!😅
谢谢大家!
Coder小王
1/8/2025
嘿,你好啊!👋
我太理解你遇到的这个 Laravel 验证错误问题了,特别是当你处理 application/x-www-form-urlencoded
数据时。之前我也在类似的项目中遇到过这种情况,真的是让人头疼!😅
Laravel 默认会将验证错误重定向回上一页,这在 API 场景下确实不太理想。为了让 Laravel 返回 JSON 格式的错误响应,你可以在 CreateApplicationRequest
中重写 failedValidation
方法。这样即使数据是 application/x-www-form-urlencoded
,也能得到一个 JSON 响应。
以下是你可以尝试的代码:
// CreateApplicationRequest.php use Illuminate\Contracts\Validation\Validator; use Illuminate\Http\Exceptions\HttpResponseException; class CreateApplicationRequest extends FormRequest { public function rules() { return [ 'email' => ['required', 'email'], 'event_slug' => ['required'], 'application_fee' => ['required', 'numeric'], 'applicant_birthdate' => ['required'], 'applicant_gender' => ['required'], 'marital_status' => ['required'], 'applicant_street_1' => ['required'], 'applicant_city' => ['required'], 'applicant_state_province' => ['required'], 'applicant_zip' => ['required'], 'applicant_country' => ['required'], 'applicant_phone' => ['required'], 'transaction_number' => ['required'], ]; } public function authorize() { return true; } protected function failedValidation(Validator $validator) { // 抛出一个 HTTP 响应异常,返回 JSON 格式的错误信息 throw new HttpResponseException(response()->json([ 'success' => false, 'errors' => $validator->errors() ], 422)); } }
application/x-www-form-urlencoded
请求,确保你的 API 能正确处理。希望这些建议能帮到你!如果还有其他问题,随时来问,我很乐意帮忙。加油,你一定能搞定的!🚀
如果你需要进一步的帮助,别犹豫,随时联系我!😊