Laravel 框架很优雅,但是没有建议和建议的编写指南
Laravel 是一个优雅的框架,同时也提供了很多灵活神奇的编写方法。但越是灵活,在某些方面可能会出现一些小问题。
以下是Laravel不推荐的写法列表,仅供讨论和参考。如果可能的话,请在评论部分分享您的想法。
请求问题
可以通过动态属性来获取请求参数,比如这样写:
$name = $request->name;不推荐这种写法,因为如果属性名是原类的属性,比如query或内容,就会出现意想不到的结果。影响。
除非你记住了该类型的所有关键字(即使你记住了所有属性,也不能保证下一个版本是否会添加新属性),否则你迟早会遇到这个坑。
不建议使用。推荐使用以下方法:
// 可以用这种方式$name = $request->input('name');// 或用这种方式$input = $request->all();$name = $input['name'];
总结:不要使用动态属性请求。
Model appends
class User extends Model{protected $appends = ['is_adult'];public function getIsAdultAttribute(){return $this->attribute['age'] > 18;}}
getXxxAttribute 是一个非常有用的函数,但是如果自动添加到模型中会导致很多问题。例如,如果您选择没有年龄字段,则仍会为您添加append字段。这有时会导致许多问题。建议不要使用 $append 属性。如有必要,请在控制器层加载此属性。
// modelclass User extends Model{public function getIsAdultAttribute(){return $this->attribute['age'] > 18;}}// controller$user = User::first();$user->append('is_adult');
总结:没有模特的append。
模型的动态属性
// 第1种写法$user = User::first();// ?? 此动态属性如果是表字段名称是如 exists 等就会出问题。$name = $user->name;// 第2种写法更安全$user = User::first()->toArray();$name = $user['name'];
模型在使用对象时也具有动态属性,这也会引起冲突问题(通常不太可能触发),但是关键字不应该尽可能多地出现在数据表字段中可能的。 (虽然第二种写法比较安全,但我想更多的人更喜欢第一种写法。我们可以在数据库字段中避免使用以下关键字。我也喜欢使用第一种写法。)
// /vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.phpexists,incrementingtimestamps
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网
