vicgutt/laravel-models-finder

在您的 Laravel 应用或包中查找所有模型

v0.1.1 2023-03-16 18:10 UTC

This package is auto-updated.

Last update: 2024-09-16 21:20:05 UTC


README

GitHub Tests Action Status GitHub PHPStan Action Status GitHub Code Style Action Status Latest Version on Packagist Total Downloads

此包允许您在指定的文件夹中查找和检索所有 Laravel 模型。一个“模型”是指任何继承自 Illuminate\Database\Eloquent\Model 的类。

以下是一个快速示例

// On an app containing only the default Laravel "User" model, running:
$models = ModelsFinder::find()
    ->map(static fn (ModelData $model): array => [
        'path' => $model->path,
        'class' => $model->class,
    ])
    ->toArray();

// would return the following:
[
    [
        'path' => '/[...]/my-project/app/Models/User.php',
        'class' => '\App\Models\User',
    ],
]

安装

您可以通过 composer 安装此包

composer require vicgutt/laravel-models-finder

使用方法

您可以通过使用 find 静态方法来启动模型的发现。

$models = ModelsFinder::find(
    directory: app_path('Models'),
    basePath: base_path(),
    baseNamespace: '',
);

此方法接受 3 个可选参数

  • directory: 要递归搜索模型的目录。默认为 app_path('Models')
  • basePath: 搜索启动的项目自动加载的入口目录。默认为 base_path()
  • baseNamespace: 搜索启动的项目自动加载的基本命名空间。默认为 ''

basePathbaseNamespace 属性很可能对应于 composer.json 文件中的一个自动加载条目。示例

{
    "autoload": {
        "psr-4": {
            // Base namespace       |  Base path
            "Spatie\\MediaLibrary\\": "src"
        }
    }
}

以下是一个示例,展示如何在 vendor 文件夹中搜索模型

ModelsFinder::find(
    directory: base_path('vendor/spatie/laravel-medialibrary'),
    basePath: base_path('vendor/spatie/laravel-medialibrary/src'),
    baseNamespace: 'Spatie\MediaLibrary'
)->toArray(),

// would return the following:
[
    [
        'path' => '[...]/vendor/spatie/laravel-medialibrary/src/MediaCollections/Models/Media.php',
        'class' => 'Spatie\MediaLibrary\MediaCollections\Models\Media',
    ],
]

此方法返回的是一个延迟加载的集合(Illuminate\Support\LazyCollection)。

测试

composer test

变更日志

有关最近更改的更多信息,请参阅变更日志

贡献

如果您想为此项目做出贡献,请在提交拉取请求之前阅读我们的贡献文档

安全漏洞

请查看我们如何报告安全漏洞的安全策略

鸣谢

许可协议

MIT 许可协议(MIT)。有关更多信息,请参阅许可文件