我想使用现有trait
的功能并在其上创建我自己的trait
,但稍后才将其应用于类。
确切地说,我想扩展Laravel SoftDeletes
特征以使SaveWithHistory
函数,因此它将创建记录的当前状态的副本作为已删除的记录。我还想用record_made_by_user_id
字段扩展它。
答案 0 :(得分:87)
是的,有。你只需要定义这样的新特征:
trait MySoftDeletes
{
use SoftDeletes {
SoftDeletes::saveWithHistory as parentSaveWithHistory;
}
public function saveWithHistory() {
$this->parentSaveWithHistory();
//your implementation
}
}
答案 1 :(得分:2)
我有不同的方法。 ParentSaveWithHistory
仍然是适用于此特征的方法,因此至少应将其定义为私有。
trait MySoftDeletes
{
use SoftDeletes {
saveWithHistory as private parentSaveWithHistory;
}
public function saveWithHistory()
{
$this->parentSaveWithHistory();
}
}
还要考虑特征中的“覆盖”方法:
use SoftDeletes, MySoftDeletes {
MySoftDeletes::saveWithHistory insteadof SoftDeletes;
}
此代码使用saveWithHistory
中的方法MySoftDeletes
,即使它存在于SoftDeletes
中。