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 属性。如有必要,请在控制器层加载此属性。
// model
class 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.php
exists,
incrementing
timestamps
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。