Php 获取Laravel 4中的所有现有模型?
是否有办法获取Laravel 4中的所有现有模型?文件中没有提到这一点,谷歌搜索这一问题也没有产生任何相关的结果 我正在开发我当前项目中的一项功能,该功能需要能够创建一份报告,说明哪些资产存在,或者哪些客户在公司购买了哪些资产。为此,我创建了一个模块,允许用户指定哪些信息放在哪个工作表上(导出到Excel) 假设我有以下模型(它们都扩展了雄辩):Php 获取Laravel 4中的所有现有模型?,php,model,laravel-4,Php,Model,Laravel 4,是否有办法获取Laravel 4中的所有现有模型?文件中没有提到这一点,谷歌搜索这一问题也没有产生任何相关的结果 我正在开发我当前项目中的一项功能,该功能需要能够创建一份报告,说明哪些资产存在,或者哪些客户在公司购买了哪些资产。为此,我创建了一个模块,允许用户指定哪些信息放在哪个工作表上(导出到Excel) 假设我有以下模型(它们都扩展了雄辩): 资产 顾客 国家 钥匙 使用者 我只希望资产和客户模型在报告中可用。我的想法是给它们一个常数,然后检查这个常数 唯一让我头疼的是一种获取Larav
- 资产
- 顾客
- 国家
- 钥匙
- 使用者
我知道我可以在app/models目录中循环,或者在某处创建一个数组,但我正在寻找更好的方法。有人知道如何做到这一点吗?经过一些研究,并在PHP聊天室里四处询问,我得出了以下解决方案: 首先,我从/app/models目录中检索所有模型,删除。和。。并将扩展名从文件名和任何剩余的空白中删除。
在我的例子中,这将起作用,因为我以类命名文件
private function getModels()
{
return array_filter(scandir(app_path('models/')), function(&$val)
{
if($val != '.' && $val != '..')
{
$val = trim(str_replace('.php', '', $val));
return class_exists($val);
}
});
}
现在我有了我想要的所有模型,我需要筛选我想要报告的模型。在我想要报告的模型上,我实现了一个名为IReportable
的接口。我想使用一个抽象类,但由于PHP不允许多重继承,所以我使用了这个方法
classmymodel扩展了雄辩的实现
就我而言:
Class Asset extends BaseModel实现可移植性
有了这个,我可以过滤模型
private function getReportableModels()
{
return array_filter($this->getModels(), function($model)
{
return in_array('IReportable', class_implements($model, false));
});
}
看看哪个显示了一种获取扩展父类的所有类的方法(在您的例子中,它是
elount
)。我将创建一个存储库或服务提供者类来处理您描述的功能。然后只需使用Laravel的内置IoC类获取类。@Andréget_declared_classes()
不会列出以前未调用的任何模型。