直接从源头完成phpdocs
该软件包生成了辅助文件,使您的IDE能够提供准确的自动完成。生成是根据项目中的文件完成的,因此它们始终是最新的。
3.x分支支持Laravel 10和11。对于较旧版本,使用2.x版本。
使用以下命令需要与作曲家一起使用此软件包:
composer require --dev barryvdh/laravel-ide-helper
笔记
如果您遇到版本与学说/DBAL发生冲突,请尝试: composer require --dev barryvdh/laravel-ide-helper --with-all-dependencies
此软件包利用了Laravels软件包自动发现机制,这意味着,如果您不在生产中安装Dev依赖项,也不会加载它。
如果由于某种原因您要手动控制以下操作:
extra.laravel.dont-discover
composer.json
,例如 "extra" : {
"laravel" : {
"dont-discover" : [
" barryvdh/laravel-ide-helper "
]
}
}
config/app.php
中的providers
数组: Barryvdh LaravelIdeHelper IdeHelperServiceProvider ::class,
register()
方法将其添加到AppServiceProvider
中: public function register ()
{
if ( $ this -> app -> isLocal ()) {
$ this -> app -> register ( Barryvdh LaravelIdeHelper IdeHelperServiceProvider ::class);
}
// ...
}
注意:避免在开发环境中缓存配置,安装此软件包后可能会导致问题;通过
php artisan cache:clear
运行命令时是否遇到问题
查看此Laracasts视频以快速介绍/说明!
php artisan ide-helper:generate
-PHPDOC的生成php artisan ide-helper:models
- 模型的PHPDOCphp artisan ide-helper:meta
- phpstorm meta文件注意:您确实需要崇高的文本:https://github.com/spectacles/codecomplice
您现在可以自己重新生成文档(以后更新)
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= " BarryvdhLaravelIdeHelperIdeHelperServiceProvider " --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 ;
});
如果您不想自己编写自己的属性,则可以使用命令php artisan ide-helper:models
来基于表列,关系和Getters/Setters生成PHPDOC。
注意:此命令需要一个工作的数据库连接到内省每个模型的表
默认情况下,要求您覆盖或写入单独的文件( _ide_helper_models.php
)。您可以使用--write (-W)
选项将注释直接写入模型文件,也可以强迫不使用--nowrite (-N)
编写。
或者,使用--write-mixin (-M)
选项仅将Mixin标签添加到模型文件中,将其余的内容添加到( _ide_helper_models.php
)中。班级名称与模型不同,避免了IDE重复的烦恼。
在编写信息之前,请确保备份模型。
写入模型应保留现有注释,而仅附加新属性/方法。它不会更新更改的属性/方法。
使用--reset (-R)
选项,更换了整个现有的PHPDOC,包括已发表的任何评论。
php artisan ide-helper:models " AppModelsPost "
/**
* AppModelsPost
*
* @property integer $id
* @property integer $author_id
* @property string $title
* @property string $text
* @property IlluminateSupportCarbon $created_at
* @property IlluminateSupportCarbon $updated_at
* @property-read User $author
* @property-read IlluminateDatabaseEloquentCollection|Comment[] $comments
* @method static IlluminateDatabaseEloquentBuilder<static>|AppModelsPost newModelQuery()
* @method static IlluminateDatabaseEloquentBuilder<static>|AppModelsPost newQuery()
* @method static IlluminateDatabaseEloquentBuilder<static>|AppModelsPost query()
* @method static IlluminateDatabaseEloquentBuilder<static>|AppModelsPost whereTitle($value)
* @method static IlluminateDatabaseEloquentBuilder<static>|AppModelsPost forAuthors(User ...$authors)
* …
*/
使用--write-mixin (-M)
选项
/**
* …
* @mixin IdeHelperPost
*/
默认情况下,扫描了app/models
中的模型。可选参数告诉使用哪些模型(也包括外部应用程序/模型)。
php artisan ide-helper:models " AppModelsPost " " AppModelsUser "
您还可以使用--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= " AppModelsPost,AppModelsUser "
也可以通过设置ignored_models
_models配置来忽略
' ignored_models ' => [
App Post ::class,
Api User ::class
],
where*
方法雄辩允许在您的模型上调用where<Attribute>
,例如Post::whereTitle(…)
,并将其自动将其转换为EG Post::where('title', '=', '…')
。
如果由于某种原因不需要生成它们(每列),则可以通过config write_model_magic_where
禁用此内容并将其设置为false
。
*_count
属性您可以使用::withCount
方法来计算关系的数字而不实际加载它们。然后将这些结果放在<columname>_count
约定之后的属性中。
默认情况下,这些属性是在PHPDOC中生成的。您可以通过将Config write_model_relation_count_properties
设置为false
来关闭它们。
Laravel 9在DocBlocks中引入了仿制药,以供收藏。 phpstorm 2022.3及以上支持在@property
和@property-read
声明中使用通用注释的使用,例如Collection<User>
而不是Collection|User[]
。
可以通过将配置use_generics_annotations
设置为false
来禁用这些。
@comment
基于DocBlock为了更好地支持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
/**
* AppModelsUsers
*
* @property-read string $full_name Get User's full name
* …
*/
添加了一种雄辩模型的新方法,称为newEloquentBuilder
参考,我们可以添加支持创建新的专用类,而不是在模型本身中使用本地范围。
如果由于某种原因不希望生成它们(每列),则可以通过config write_model_external_builder_methods
禁用此内容并将其设置为false
。
如果您使用的是没有内置在Laravel中的关系,则需要在配置中指定名称和返回类以获得适当的生成。
' additional_relation_types ' => [
' externalHasMany ' => My Package externalHasMany::class
],
发现的关系通常会根据关系名称生成返回值。
如果您的自定义关系不遵循此传统命名方案,则可以手动定义其返回类型。可用的选项many
,而morphTo
。
' additional_relation_return_types ' => [
' externalHasMultiple ' => ' many '
],
如果您需要从默认情况下未处理的源中有关模型的其他信息,则可以使用模型挂钩进入生成过程,以添加额外的信息。只需创建一个实现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 , ' SomeClass ' ), [ ' $param ' ]);
}
}
/**
* MyModel
*
* @property integer $ id
* @property-read string $ custom
如果您需要phpdocs支持流利的迁移方法,例如
$ table -> string ( " somestring " )-> nullable ()-> index ();
发布供应商后,只需将您的config/ide-helper.php
中的include_fluent
行更改为:
' include_fluent ' => true ,
然后运行php artisan ide-helper:generate
,您现在将看到IDE识别的所有流利方法。
如果您想要factory()->create()
和factory()->make()
返回正确模型类的方法,则可以在config/ide-helper.php
文件中使用include_factory_builders
line启用自定义工厂构建器。弃用Laravel 8或最新。
' include_factory_builders ' => true ,
为此,您还必须发布phpstorm meta文件(请参见下文)。
可以生成phpstorm meta文件,以增加对工厂设计模式的支持。对于Laravel而言,这意味着我们可以使PhpStorm了解我们正在从IOC容器中解决哪种对象。例如, events
将返回一个IlluminateEventsDispatcher
对象,因此,使用META文件,您可以调用app('events')
,并且它将自动完成调度程序方法。
php artisan ide-helper:meta
app ( ' events ' )-> fire ();
App :: make ( ' events ' )-> fire ();
/** @var IlluminateFoundationApplication $app */
$ app -> make ( ' events ' )-> fire ();
// When the key is not found, it uses the argument as class name
app ( ' AppSomeClass ' );
// Also works with
app ( App SomeClass ::class);
注意:您可能需要重新启动phpstorm并确保索引
.phpstorm.meta.php
。注意:当您收到fatalexception:找不到类时,请检查您的配置(例如,在未配置S3时将S3作为云驱动程序删除。当您不使用它时,请删除Redis ServiceProvider)。
您可以通过config meta_filename
更改生成的文件名。对于您想利用PHPSTOMS对目录的支持.phpstorm.meta.php/
:如果您要提供其他文件以提供其他文件以提供phpstorm的情况,这可能很有用。
Laravel IDE助手发电机是根据MIT许可证许可的开源软件