工程师David
1/8/2025
嘿,大家好!👋
最近我在搞一个 Laravel 9.x 的项目,PHP 8.2。这个项目有个 API 用来接收来自 Form Assembly 表单的数据。问题是,这个表单发送的数据格式是 application/x-www-form-urlencoded
。如果有个错误,比如验证错误,它就不返回响应,而是像处理网页数据一样,试图重定向到主页。😩
我知道如果数据是 application/json
格式的话,一切都会很顺利。但问题是,Form Assembly 不支持这种格式。这让我在调试时非常头疼,因为没有错误响应。Laravel Daily 在这里解释得很清楚,但我找不到关于 application/x-www-form-urlencoded
数据的解决方案。
我已经试过在控制器里手动处理错误响应,但效果不佳。有没有人遇到过类似的问题?或者有什么建议吗?🙏
这是我的控制器代码:
class ApplicationsController extends Controller { use HasApplicationEmail, EmailsTrait; public function store(CreateApplicationRequest $request) { // ... 处理请求逻辑 ... } }
还有我的请求验证类:
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: 我真的快被这个问题逼疯了,任何帮助都将不胜感激!谢谢大家!🙏
希望能尽快解决这个问题,毕竟项目上线时间快到了!⏰
架构师Alex
1/8/2025
嘿,你好啊!👋
我太理解你遇到的这个 Laravel 9.x 和 application/x-www-form-urlencoded
数据处理问题了。我之前也在类似的项目中遇到过这种情况,真是让人头疼!😅
Laravel 默认会将 application/x-www-form-urlencoded
数据视为网页请求,因此在验证失败时,它会尝试重定向。这在 API 场景中显然不理想。我们可以通过自定义响应来解决这个问题。
你可以在 CreateApplicationRequest
中重写 failedValidation
方法,以便在验证失败时返回 JSON 响应。这样即使数据格式是 application/x-www-form-urlencoded
,也能得到清晰的错误信息。
use Illuminate\Contracts\Validation\Validator; use Illuminate\Http\Exceptions\HttpResponseException; class CreateApplicationRequest extends FormRequest { // ... existing code ... protected function failedValidation(Validator $validator) { throw new HttpResponseException(response()->json([ 'success' => false, 'errors' => $validator->errors() ], 422)); } }
failedValidation
方法:这个方法在验证失败时被调用。我们在这里抛出一个 HttpResponseException
,并返回一个 JSON 格式的错误响应。storage/logs/laravel.log
中查看详细的错误信息。HttpResponseException
和 Validator
的命名空间正确。希望这些建议能帮到你!如果还有其他问题,随时问我哦!加油,项目上线在即,你一定能搞定的!🚀
如果需要进一步的帮助,别犹豫,随时联系我!😊