直接從源頭完成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許可證許可的開源軟件