问题:是否可以获取特征构成的特征列表?作为参考,我指的是traits composed from traits。
方案::我有用于模型User
,Account
和Lead
的类。我具有称为People
,Importable
,Exportable
,Validatable
,ImplicitAttributable
,Auditable
,Listable
,{{1} },Permitable
,Searchable
,Encryptable
,Hashable
,Currentable
和Relatable
。所有这三个类都实现了Triggerable
特性。
名为People
的特征由People
,Auditable
,Listable
,Permitable
,Searchable
,Encryptable
, Hashable
,Currentable
和Relatable
。
我正在尝试按特征筛选班级。但是,当我尝试用特征Triggerable
来过滤时,该特征未在其中一个模型中明确定义(相反,它是组合特征Searchable
的一部分),没有任何结果。>
当前使用的方法:
我尝试使用PHP的class_uses和以下功能:
People
生成要过滤的特征列表。我在列表中获得了function getTraitsForClass($class)
{
return array_keys((new \ReflectionClass($class))->getTraits());
}
特质,但没有得到People
特质。
其他信息:
我正在使用Laravel 5.7和PHP 7.1.23构建应用程序。
答案 0 :(得分:0)
事实证明,ReflectionClass
也可以用于特质。所以我将功能修改为:
function getTraitsForClass($something)
{
$traits = array_keys((new \ReflectionClass($something))->getTraits());
foreach ($traits as $trait) {
$traits = array_merge($traits, getTraitsForClass($trait));
}
$traits = array_unique($traits);
return $traits;
}
我能够获得特征的完整列表。