我在一个模型之一中添加了一种方法:
<?php
namespace App;
use IlluminateDatabaseEloquentModel;
class Test extends Model
{
public static function boot()
{
parent::boot();
static::created(function ($model) {
//log $model or maybe do something more complex here
});
}
}
我希望将相同的行为扩展到许多其他模型。复制粘贴这种效果似乎是一个好主意,因为如果某些事情发生了变化,我不想在不同的地方更改它。什么是仅编写一次并获得多个模型的相同行为的最佳解决方案?
特征是为此构建的。写一次并在所有类上使用。
在应用程序/特征/mytraitname.php
中创建一个特质<?php
namespace AppTraits;
use CarbonCarbon;
trait MyTraitName
{
public function someName() {
// TO DO;
}
}
,然后将其导入到任何模型类的顶部,例如用户:
<?php
namespace App;
use AppTraitsMyTraitName;
use IlluminateNotificationsNotifiable;
use IlluminateFoundationAuthUser as Authenticatable;
class User extends Authenticatable
{
use Notifiable, MyTraitName;
..............
扩展课程和制作性状之间的区别是,当您制作特质时,该功能已经编写,并且在每个模型上自动使用相同的方式,并且如果该功能不进行,则从某个基类延伸会更好每个型号都相同。