内容
# 模型浏览器适用于 Laravel
[](https://packagist.org/packages/onelearningcommunity/laravel-model-explorer)
[](https://github.com/one-learning-community/laravel-model-explorer/actions?query=workflow%3Arun-tests+branch%3Amain)
[](https://packagist.org/packages/onelearningcommunity/laravel-model-explorer)
一个适用于 Laravel 的开发者工具,为您提供可浏览的 UI 来探索 Eloquent 模型 —— 它们的属性、转换、关系、作用域、特性和实时数据 —— 无需阅读代码。
**Composer 安装之外无需其他设置。** 无需 `vendor:publish`,无需在您的应用程序中进行前端工具配置。
## 要求
- PHP 8.3+
- Laravel 11, 12 或 13
## 功能
- **模型列表** —— 所有已发现的 Eloquent 模型的搜索网格
- **模型详情** —— 数据库列、转换、可填充/隐藏/保护的属性、关系(带有类型徽章和外键)、作用域(带有源代码片段)、特性和访问器代码片段
- **记录查找** —— 按主键或唯一字段查找任意记录;浏览原始属性、延迟加载的访问器值和可展开的关系,带有向下钻取导航和面包屑导航
- **关系图** —— 所有模型关系的交互式力导向 SVG 图
## 安装
```bash
composer require --dev onelearningcommunity/laravel-model-explorer
```
该软件包通过 Laravel 的软件包发现自动注册 —— 无需额外设置。
## 使用
在您的应用程序中访问 `/_model-explorer`。在本地环境中,默认授予访问权限。
## 授权
访问由 `viewModelExplorer` 门控决定,默认情况下仅在 `local` 环境中允许访问。在 `AuthServiceProvider` 中覆盖它以控制在其他地方的访问:
```php
Gate::define('viewModelExplorer', function (User $user): bool {
return $user->isAdmin();
});
```
要完全禁用模型浏览器,无论门控如何,请设置环境变量:
```env
MODEL_EXPLORER_ENABLED=false
```
## 配置
发布配置文件以自定义行为:
```bash
php artisan vendor:publish --tag="model-explorer-config"
```
```php
return [
// 设置为 false 以完全禁用(例如,在生产环境中强制关闭)
'enabled' => env('MODEL_EXPLORER_ENABLED', true),
// 所有模型浏览器路由的前缀
'path' => env('MODEL_EXPLORER_PATH', '_model-explorer'),
// 应用于所有路由的中间件(必须包含 'web')
'middleware' => ['web'],
// 扫描 Eloquent 模型的目录(添加更多适用于 DDD 布局、软件包等)
// 键是根命名空间,值是绝对目录路径。
'model_paths' => [
'App' => app_path(),
// 'Domain\\Billing' => base_path('src/Billing'),
],
// 隐藏的模型类,匹配这些模式,即使在扫描路径内。
// 条目匹配完全限定类名,可以使用 `*` 作为通配符(前导 `\` 被忽略)。
'excluded_models' => [
// 'Laravel\\Telescope\\*',
// 'App\\Models\\Internal\\AuditLog',
],
// 特性全名以这些前缀开头,将在 UI 中隐藏
'excluded_trait_prefixes' => [
'Illuminate\Database\Eloquent\Concerns\\',
'Illuminate\Database\Eloquent\HasCollection',
'Illuminate\Support\Traits\\',
],
// 每个页面显示的相关记录数,当深入到多对多关系时,
// 以及集合返回值访问器值的上限。
'per_page' => env('MODEL_EXPLORER_PER_PAGE', 15),
// 缓存模型发现和检查结果(建议适用于大型应用程序)。
// 默认禁用,以便在开发过程中模型更改立即生效。
'cache' => [
'enabled' => env('MODEL_EXPLORER_CACHE', false),
'store' => env('MODEL_EXPLORER_CACHE_STORE'), // null = 默认存储
'ttl' => env('MODEL_EXPLORER_CACHE_TTL'), // 秒;null = 永久
],
];
```
### 缓存
对于具有许多模型的应用程序,可以通过设置 `MODEL_EXPLORER_CACHE=true` 来启用文件系统扫描和模型列表、详情和图形视图后面的反射。模型详情页面在模型文件更改时自动刷新;模型列表和图形缓存直到 TTL 过期或您手动清除:
```bash
php artisan model-explorer:clear
```
## AI 模型内省(MCP)
模型浏览器附带一个本地 [`laravel/mcp`](https://laravel.com/docs/mcp) 服务器 `model-explorer`,允许 AI 编码代理在不扫描源代码的情况下内省您的 Eloquent 模型。在您的 AI 客户端中注册它:
```json
{
"mcpServers": {
"model-explorer": {
"command": "php",
"args": ["artisan", "mcp:start", "model-explorer"]
}
}
}
```
工具:`list-models`、`inspect-model`(通过 `include` 选择部分)、`relationship-graph`、`find-model`(按 `trait`/`extends`/`relatesTo`/`hasColumn` 筛选)和 `model-source`。如果您使用 [Laravel Boost](https://laravel.com/docs/boost),`boost:install` 会自动向您的代理宣传这些工具。
这些工具默认情况下读取实时数据,因此代理在开发过程中永远不会看到过时的结构。设置 `MODEL_EXPLORER_MCP_CACHE=true` 以在非常大的模型集上用速度换取新鲜度,或设置 `MODEL_EXPLORER_MCP=false` 以完全禁用服务器。
## 安全
Laravel 模型浏览器适用于开发使用。`viewModelExplorer` 门控应该防止在生产环境中访问。
所有记录读取都包含在回滚事务中,使用 `Model::withoutEvents()` 以防止观察器或模型事件的意外写入。注意,访问器方法(HTTP 调用、缓存写入、队列推送)的非数据库副作用 **不会** 被阻止。
## 更新日志
请参阅 [CHANGELOG](CHANGELOG.md) 以获取最近更改的更多信息。
## 许可证
MIT 许可证(MIT)。请参阅 [License File](LICENSE.md) 以获取更多信息。