Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取Laravel 4中的所有现有模型?_Php_Model_Laravel 4 - Fatal编程技术网

Php 获取Laravel 4中的所有现有模型?

Php 获取Laravel 4中的所有现有模型?,php,model,laravel-4,Php,Model,Laravel 4,是否有办法获取Laravel 4中的所有现有模型?文件中没有提到这一点,谷歌搜索这一问题也没有产生任何相关的结果 我正在开发我当前项目中的一项功能,该功能需要能够创建一份报告,说明哪些资产存在,或者哪些客户在公司购买了哪些资产。为此,我创建了一个模块,允许用户指定哪些信息放在哪个工作表上(导出到Excel) 假设我有以下模型(它们都扩展了雄辩): 资产 顾客 国家 钥匙 使用者 我只希望资产和客户模型在报告中可用。我的想法是给它们一个常数,然后检查这个常数 唯一让我头疼的是一种获取Larav

是否有办法获取Laravel 4中的所有现有模型?文件中没有提到这一点,谷歌搜索这一问题也没有产生任何相关的结果

我正在开发我当前项目中的一项功能,该功能需要能够创建一份报告,说明哪些资产存在,或者哪些客户在公司购买了哪些资产。为此,我创建了一个模块,允许用户指定哪些信息放在哪个工作表上(导出到Excel)

假设我有以下模型(它们都扩展了雄辩):

  • 资产
  • 顾客
  • 国家
  • 钥匙
  • 使用者
我只希望资产和客户模型在报告中可用。我的想法是给它们一个常数,然后检查这个常数

唯一让我头疼的是一种获取Laravel应用程序中定义的所有模型的方法


我知道我可以在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()
不会列出以前未调用的任何模型。