如何简化优化Laravel中创建Contact的onSave函数?寻求开发最佳实践
针对这段Laravel代码的优化方案如下,都是Laravel生态的通用最佳实践:
- 替换手动创建Validator实例的写法,用控制器自带的
validate方法,验证不通过时Laravel会自动返回上一页并携带错误信息,无需手动判断fails()再跳转 - 给Contact模型设置
$fillable属性开启批量赋值,不需要逐行给模型字段赋值,减少重复代码 - 去掉冗余的
else分支,验证失败直接返回后,后续逻辑不需要嵌套在else块里,代码层级更清晰 - 空验证规则建议替换为
nullable,语义更明确,避免后续维护时产生误解 - 跳转尽量不要硬写路径,给路由设置别名后用
route()辅助函数生成地址,后续调整路由时不需要修改控制器代码
基础优化版本代码
首先调整Contact模型,配置可批量赋值字段:
// App/Models/Contact.php protected $fillable = [ 'firstname', 'lastname', 'phone', 'email', 'line_1', 'line_2', 'line_3', 'city', 'state', 'postcode', 'organisation_id' ];
优化后的控制器方法:
public function onSave() { $validated = $this->validate(request(), [ 'firstname' => 'required', 'lastname' => 'required', 'phone' => 'required', 'email' => 'required|email', 'line_1' => 'required', 'line_2' => 'nullable', 'line_3' => 'nullable', 'city' => 'required', 'state' => 'required', 'postcode' => 'required', 'organisation_id' => 'required', ]); $contact = Contact::create($validated); return redirect("/contacts/{$contact->id}"); }
进阶规范版本(适合中大型项目)
使用表单请求类把验证逻辑完全抽离出控制器,代码更易维护:
- 执行命令创建表单请求类:
php artisan make:request StoreContactRequest - 配置请求类的验证规则:
// App/Http/Requests/StoreContactRequest.php public function rules() { return [ 'firstname' => 'required', 'lastname' => 'required', 'phone' => 'required', 'email' => 'required|email', 'line_1' => 'required', 'line_2' => 'nullable', 'line_3' => 'nullable', 'city' => 'required', 'state' => 'required', 'postcode' => 'required', 'organisation_id' => 'required', ]; }
- 控制器直接注入请求类,代码简化为:
public function onSave(StoreContactRequest $request) { $contact = Contact::create($request->validated()); // 假设联系人详情路由已设置别名为contacts.show return redirect()->route('contacts.show', $contact); }
内容的提问来源于stack exchange,提问作者Jakef19
相关产品推荐
相关产品推荐

