barryvdh / laravel-ide-helper
Laravel IDE Helper,为所有 Facade 类生成正确的 PHPDocs,以提高自动完成功能。
Requires
- php: ^8.1
- ext-json: *
- barryvdh/reflection-docblock: ^2.1.1
- composer/class-map-generator: ^1.0
- illuminate/console: ^10 || ^11
- illuminate/database: ^10.38 || ^11
- illuminate/filesystem: ^10 || ^11
- illuminate/support: ^10 || ^11
- nikic/php-parser: ^4.18 || ^5
- phpdocumentor/type-resolver: ^1.1.0
Requires (Dev)
- ext-pdo_sqlite: *
- friendsofphp/php-cs-fixer: ^3
- illuminate/config: ^9 || ^10 || ^11
- illuminate/view: ^9 || ^10 || ^11
- mockery/mockery: ^1.4
- orchestra/testbench: ^8 || ^9
- phpunit/phpunit: ^10.5
- spatie/phpunit-snapshot-assertions: ^4 || ^5
- vimeo/psalm: ^5.4
Suggests
- illuminate/events: Required for automatic helper generation (^6|^7|^8|^9|^10|^11).
- dev-master / 3.1.x-dev
- v3.1.0
- v3.0.0
- 2.15.x-dev
- v2.15.1
- v2.15.0
- v2.14.0
- v2.13.0
- v2.12.3
- v2.12.2
- v2.12.1
- v2.12.0
- v2.11.0
- v2.10.0
- v2.9.3
- v2.9.2
- v2.9.1
- v2.9.0
- v2.8.2
- v2.8.1
- v2.8.0
- v2.7.0
- v2.6.7
- v2.6.6
- v2.6.5
- v2.6.4
- v2.6.3
- v2.6.2
- v2.6.1
- v2.6.0
- v2.5.3
- v2.5.2
- v2.5.1
- v2.5.0
- v2.4.3
- v2.4.2
- v2.4.1
- v2.4.0
- v2.3.2
- v2.3.1
- v2.3.0
- v2.2.3
- v2.2.2
- v2.2.1
- v2.2.0
- v2.1.4
- v2.1.3
- v2.1.2
- v2.1.1
- v2.1.0
- v2.0.6
- v2.0.5
- v2.0.4
- v2.0.3
- v2.0.2
- v2.0.1
- v2.0.0
- 1.11.x-dev
- v1.11.6
- v1.11.5
- v1.11.4
- v1.11.3
- v1.11.2
- v1.11.1
- v1.11.0
- v1.10.0
- v1.9.3
- v1.9.2
- v1.9.1
- v1.9.0
- v1.8.1
- v1.8.0
- v1.7.2
- v1.7.1
- v1.7.0
- v1.6.1
- v1.6.0
- v1.5.2
- v1.5.1
- v1.5.0
- v1.4.0
- v1.3.2
- v1.3.1
- v1.3.0
- v1.2.1
- v1.2.0
- v1.1.3
- v1.1.2
- v1.1.1
- v1.1.0
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- v1.0.0-beta2
- v1.0.0-beta1
- dev-barryvdh-patch-3
- dev-mp-run-fix-style
- dev-feat-docblocks
- dev-fix-tests-and-cs
- dev-barryvdh-patch-2
- dev-fix-lowest-stability
- dev-barryvdh-patch-1
- dev-barryvdh-fix-cs-1
- dev-revert-624-Fix/623
- dev-revert-303-master
This package is auto-updated.
Last update: 2024-09-20 12:51:28 UTC
README
完整的 PHPDocs,直接从源代码生成
此包生成辅助文件,使您的 IDE 能够提供准确的自动完成。生成基于您项目中的文件,因此它们始终保持最新。
3.x 分支支持 Laravel 10 和 11。对于旧版本,请使用 2.x 版本。
安装
使用以下命令通过 composer 安装此包:
composer require --dev barryvdh/laravel-ide-helper
注意
如果您遇到 doctrine/dbal 版本的冲突,请尝试: composer require --dev barryvdh/laravel-ide-helper --with-all-dependencies
此包利用了 Laravel 的包自动发现机制,这意味着如果您在生产环境中没有安装开发依赖项,它也不会被加载。
如果您出于某种原因想要手动控制此行为
- 将包添加到
composer.json
中的extra.laravel.dont-discover
键,例如:"extra": { "laravel": { "dont-discover": [ "barryvdh/laravel-ide-helper" ] } }
- 将以下类添加到
config/app.php
中的providers
数组:Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class,
如果您只想在非生产环境中手动加载它,则可以将以下内容添加到您的AppServiceProvider
中,使用register()
方法:public function register() { if ($this->app->isLocal()) { $this->app->register(\Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class); } // ... }
注意:请勿在开发环境中缓存配置,这可能会在安装此包后导致问题;如果运行命令时遇到问题,请先通过
php artisan cache:clear
清除缓存。
用法
查看 此 Laracasts 视频教程 了解快速介绍/解释!
php artisan ide-helper:generate
- Laravel Facades 的 PHPDoc 生成php artisan ide-helper:models
- 模型的 PHPDocphp artisan ide-helper:meta
- PhpStorm Meta 文件
注意:您需要为 Sublime Text 安装 CodeComplice: https://github.com/spectacles/CodeComplice
为 Laravel Facades 自动生成 PHPDoc
现在您可以自己重新生成文档(用于未来的更新)
php artisan ide-helper:generate
注意:必须在生成之前清除 bootstrap/compiled.php
,因此请在生成之前运行 php artisan clear-compiled
。
这将生成文件 _ide_helper.php
,它应该由您的 IDE 解析以提供自动完成。您可以使用配置 filename
来更改其名称。
您可以将配置文件发布到您的 composer.json
中,以在更新依赖项时执行此操作。
"scripts": { "post-update-cmd": [ "Illuminate\\Foundation\\ComposerScripts::postUpdate", "@php artisan ide-helper:generate", "@php artisan ide-helper:meta" ] },
您还可以发布配置文件以更改实现(例如,接口到特定类)或为 --helpers
设置默认值。
php artisan vendor:publish --provider="Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider" --tag=config
生成器尝试识别实际类,但如果找不到,您可以在配置文件中定义它。
某些类需要有效的数据库连接。如果没有默认的工作连接,一些外观类将不会包含在内。您可以通过添加 -M
选项来使用内存中的 SQLite 驱动程序。
如果您在您的应用程序中使用 实时外观,它们也将通过 @mixin
注解和扩展外观下面的原始类的方式包含在生成的文件中。
注意:此功能使用在 storage/framework/cache
文件夹中生成的实时外观文件。这些文件在需要时按需生成,因此如果框架尚未生成,则不会包含在辅助文件中。首先运行路由/命令/代码,然后重新生成辅助文件,这次实时外观将包含在内。
您可以选择包含辅助文件。默认情况下,此功能未启用,但您可以使用 --helpers (-H)
选项覆盖它。已设置 Illuminate/Support/helpers.php
,但您可以在配置文件中添加/删除自己的文件。
宏和混入的自动 PHPDoc 生成
此包可以为宏和混入生成 PHPDoc,并将其添加到 _ide_helper.php
文件中。
但这仅当您在声明宏时使用类型提示时才有效。
Str::macro('concat', function(string $str1, string $str2) : string { return $str1 . $str2; });
为模型自动生成 PHPDoc
如果您不想自己编写属性,可以使用 php artisan ide-helper:models
命令来生成 PHPDoc,这些 PHPDoc 基于表的列、关系和获取器/设置器。
注意:此命令需要有效数据库连接以反射每个模型表
默认情况下,您会被提示覆盖或写入一个单独的文件(_ide_helper_models.php
)。您可以使用 --write (-W)
选项将注释直接写入您的模型文件,或使用 --nowrite (-N)
强制不写入。
或者,使用 --write-mixin (-M)
选项将只添加一个混入标签到您的模型文件,其余的写入到(_ide_helper_models.php
)。类名将与模型不同,以避免 IDE 重复的烦恼。
请在写入信息之前确保备份您的模型。
写入模型应保留现有的注释并仅追加新的属性/方法。它不会更新已更改的属性/方法。
使用 --reset (-R)
选项,将替换整个现有的 PHPDoc,包括任何注释。
php artisan ide-helper:models "App\Models\Post"
/** * App\Models\Post * * @property integer $id * @property integer $author_id * @property string $title * @property string $text * @property \Illuminate\Support\Carbon $created_at * @property \Illuminate\Support\Carbon $updated_at * @property-read \User $author * @property-read \Illuminate\Database\Eloquent\Collection|\Comment[] $comments * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Post newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Post newQuery() * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Post query() * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Post whereTitle($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Post forAuthors(\User ...$authors) * … */
使用 --write-mixin (-M)
选项
/** * … * @mixin IdeHelperPost */
模型目录
默认情况下,将扫描 app/models
中的模型。可选参数告诉使用哪些模型(也包括在 app/models 外部)。
php artisan ide-helper:models "App\Models\Post" "App\Models\User"
您也可以使用 --dir
选项(从基本路径相对于)扫描不同的目录。
php artisan ide-helper:models --dir="path/to/models" --dir="app/src/Model"
您可以通过运行 php artisan vendor:publish
发布配置文件并设置默认目录。
忽略模型
可以使用 --ignore (-I)
选项忽略模型
php artisan ide-helper:models --ignore="App\Models\Post,App\Models\User"
或者可以通过设置 ignored_models
配置来忽略
'ignored_models' => [ App\Post::class, Api\User::class ],
魔法 where*
方法
Eloquent 允许在您的模型上调用 where<Attribute>
,例如 Post::whereTitle(…)
,并自动将其转换为例如 Post::where('title', '=', '…')
。
如果出于某种原因不希望它们生成(每个列一个),可以通过配置 write_model_magic_where
并将其设置为 false
来禁用此功能。
魔法 *_count
属性
您可以使用 ::withCount
方法来计数关系的数量而不实际加载它们。这些结果随后放置在遵循 <columname>_count
约定的属性中。
默认情况下,这些属性在 phpdoc 中生成。您可以通过将配置 write_model_relation_count_properties
设置为 false
来关闭它们。
泛型注解
Laravel 9 引入了 DocBlocks 中的泛型注解。PhpStorm 2022.3 及以上版本支持在 @property
和 @property-read
声明中使用泛型注解,例如 Collection<User>
而不是 Collection|User[]
。
可以通过将配置use_generics_annotations
设置为false
来禁用这些功能。
支持基于DocBlock的@comment
。
为了更好地支持IDE,关系和getter/setter也可以添加注释到属性,例如表列。因此,使用自定义的docblock @comment
。
class Users extends Model { /** * @comment Get User's full name * * @return string */ public function getFullNameAttribute(): string { return $this->first_name . ' ' .$this->last_name ; } } // => after generate models /** * App\Models\Users * * @property-read string $full_name Get User's full name * … */
专门的Eloquent构建器方法
向Eloquent模型添加了一个名为newEloquentBuilder
的新方法 参考,我们可以添加对创建新的专用类的支持,而不是在模型本身中使用本地作用域。
如果出于某种原因不希望它们被生成(每个列一个),可以通过配置write_model_external_builder_methods
并设置为false
来禁用此功能。
自定义关系类型
如果您使用的是Laravel中未内置的关系,您需要在配置中指定名称和返回类以获取正确的生成。
'additional_relation_types' => [ 'externalHasMany' => \My\Package\externalHasMany::class ],
找到的关系通常会根据关系的名称生成返回值。
如果您的自定义关系不遵循此传统命名约定,您可以手动定义其返回类型。可用选项为many
和morphTo
。
'additional_relation_return_types' => [ 'externalHasMultiple' => 'many' ],
模型钩子
如果您需要从默认处理之外的信息源获取模型信息,您可以通过模型挂钩 hook 到生成过程以动态添加额外信息。只需创建一个实现ModelHookInterface
的类,并将其添加到配置中的model_hooks
数组中。
'model_hooks' => [ MyCustomHook::class, ],
在生成过程中,对于每个模型都会调用run
方法,它接收当前的ModelsCommand
和当前的Model
,例如。
class MyCustomHook implements ModelHookInterface { public function run(ModelsCommand $command, Model $model): void { if (! $model instanceof MyModel) { return; } $command->setProperty('custom', 'string', true, false, 'My custom property'); $command->unsetMethod('method'); $command->setMethod('method', $command->getMethodType($model, '\Some\Class'), ['$param']); } }
/** * MyModel * * @property integer $id * @property-read string $custom
为 Laravel Fluent 方法自动生成 PHPDoc
如果您需要在迁移中为Fluent方法提供PHPDocs支持,例如。
$table->string("somestring")->nullable()->index();
发布供应商后,只需将您的config/ide-helper.php
文件中的include_fluent
行更改为。
'include_fluent' => true,
然后运行php artisan ide-helper:generate
,现在您将看到所有IDE识别的Fluent方法。
为工厂构建器提供自动完成
如果您希望factory()->create()
和factory()->make()
方法返回正确的模型类,可以通过在您的config/ide-helper.php
文件中添加include_factory_builders
行来启用自定义工厂构建器。对于Laravel 8或更高版本已弃用。
'include_factory_builders' => true,
为了使其正常工作,您还必须发布PhpStorm元文件(见下文)。
为容器实例提供 PhpStorm Meta
可以通过生成PhpStorm元文件来添加对工厂设计模式的支持。对于Laravel,这意味着我们可以让PhpStorm理解我们从IoC容器中解析出的对象的类型。例如,events
将返回一个Illuminate\Events\Dispatcher
对象,因此,使用元文件,您可以调用app('events')
并自动完成Dispatcher方法。
php artisan ide-helper:meta
app('events')->fire(); \App::make('events')->fire(); /** @var \Illuminate\Foundation\Application $app */ $app->make('events')->fire(); // When the key is not found, it uses the argument as class name app('App\SomeClass'); // Also works with app(App\SomeClass::class);
注意:您可能需要重新启动PhpStorm并确保
.phpstorm.meta.php
被索引。注意:当您收到致命异常:找不到类时,检查您的配置(例如,当您没有配置S3时,请删除S3作为云驱动程序。当您不使用Redis时,请删除Redis ServiceProvider)。
您可以通过配置meta_filename
来更改生成的文件名。这在您想利用PhpStorm对目录 .phpstorm.meta.php/
的支持时很有用:所有放置在该目录中的文件都将被解析,如果您想向PhpStorm提供额外的文件。
许可协议
Laravel IDE Helper Generator是开源软件,采用MIT许可