Laravel框架优雅,不太建议与建议写法指南

2022-02-1420:51:28后端程序开发Comments1,094 views字数 1208阅读模式

Laravel 优雅的框架,同时提供了大量灵活并且神奇的写法。但越灵活,在一些方面可能会存在小问题。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23157.html

以下列出 Laravel 不太建议的写法,仅大家讨论与参考。如果可能的话在评议区说出你的看法吧。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23157.html

Request 问题文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23157.html

Request 参数可以通过动态属性获取,如以下写法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23157.html

$name = $request->name;

该写法非常不建议,原因是如果属性名称为 query 或者 content 之类原本类的属性,就会产生非预期效果。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23157.html

除非你把所有该类的所以关键词都记住(就算你记住所有的属性,你也保证不了下个版本会不会加新的属性),否则你早晚会遇到这个坑。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23157.html

比较不建议使用,建议使用如下方式:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23157.html

// 可以用这种方式$name = $request->input('name');// 或用这种方式$input = $request->all();$name = $input['name'];

总结:不使用 request 动态属性。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23157.html

Model appends文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23157.html

class User extends Model{  protected $appends = ['is_adult'];  public function getIsAdultAttribute(){      return $this->attribute['age'] > 18;  }}

getXxxAttribute 是一个很用的特性,但如果 model 中自动 append 就会产生很多问题,如你在 select 的时候,没有 age 字段,依然会帮你加上 append 的字段,这有时会带来很多问题。建议不使用 $append 这个属性。在需要的时候,在 controller 层加载这个属性。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23157.html

// modelclass User extends Model{  public function getIsAdultAttribute(){      return $this->attribute['age'] > 18;  }}// controller$user = User::first();$user->append('is_adult');

总结:不使用 model 的 appends。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23157.html

Model 的动态属性文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23157.html

// 第1种写法$user = User::first();// ?? 此动态属性如果是表字段名称是如 exists 等就会出问题。$name = $user->name;// 第2种写法更安全$user = User::first()->toArray();$name = $user['name'];

Model 在使用对象时也有动态属性,也同样会产生冲突问题 (一般不太可能触发到),但数据表字段尽可能不出现下关键词。(虽然第 2 种写法更安全,但相信更多人更喜欢第一种写法吧,我们避免数据库字段如下关键词就好了。我也喜欢用第 1 种写法。)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23157.html

// /vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php exists,incrementingtimestamps
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/23157.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/23157.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定