ソースから直接PHPDOCを完全にします
このパッケージは、IDEが正確なオートコンプリートを提供できるようにするヘルパーファイルを生成します。生成はプロジェクトのファイルに基づいて行われるため、常に最新です。
3.XブランチはLaravel 10および11をサポートします。古いバージョンの場合、2.xリリースを使用します。
次のコマンドを使用して、作曲家とのこのパッケージが必要です。
composer require --dev barryvdh/laravel-ide-helper
注記
バージョンがDoctrine/Dbalと競合した場合は、試してみてください: composer require --dev barryvdh/laravel-ide-helper --with-all-dependencies
このパッケージでは、Laravelsパッケージの自動発見メカニズムを使用しています。つまり、生産に開発者依存関係をインストールしないと、ロードされません。
何らかの理由でこれを手動で制御したい場合:
composer.json
のextra.laravel.dont-discover
キーにパッケージを追加します。 "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 Laravel FacadesのPHPDOC生成php artisan ide-helper:models
-PHPDOCSのPHPDOCphp artisan ide-helper:meta
-Phpstorm Metaファイル注:崇高なテキストにはCodeCompliceが必要です:https://github.com/spectacles/codecomplice
これで、ドキュメントを自分で再生できるようになりました(将来の更新用)
php artisan ide-helper:generate
注: bootstrap/compiled.php
最初にクリアする必要があるため、生成する前にphp artisan clear-compiled
を実行します。
これにより、AutocompleteのためにIDEによってさらに解析されると予想されるファイル_ide_helper.php
が生成されます。 config 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
すでにセットアップされていますが、構成ファイルに独自のファイルを追加/削除できます。
このパッケージは、 _ide_helper.php
ファイルに追加されるマクロとミキシン用のphpdocsを生成できます。
ただし、これは、マクロを宣言するときにタイプヒントを使用する場合にのみ機能します。
Str :: macro ( ' concat ' , function ( string $ str1 , string $ str2 ) : string {
return $ str1 . $ str2 ;
});
自分でプロパティを書きたくない場合は、テーブル列、関係、ゲッター/セッターに基づいて、コマンドphp artisan ide-helper:models
使用して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 " 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 "
configファイル( php artisan vendor:publish
)を公開し、デフォルトのディレクトリを設定できます。
モデルは--ignore (-I)
オプションを使用して無視できます
php artisan ide-helper:models --ignore= " AppModelsPost,AppModelsUser "
または、 ignored_models
Configを設定することで無視できます
' ignored_models ' => [
App Post ::class,
Api User ::class
],
where*
メソッドEloquentでは、モデルのwhere<Attribute>
を許可します。たとえば、 Post::whereTitle(…)
、これをeg Post::where('title', '=', '…')
に自動的に変換します。
何らかの理由でそれらを生成することが望ましくない場合(各列に1つ)、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[]
これらは、config use_generics_annotations
false
に設定することで無効にできます。
@comment
をサポートしますIDESをよりよくサポートするために、関係とゲッター/セッターは、テーブル列などのプロパティにコメントを追加することもできます。したがって、カスタム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
* …
*/
Eloquentモデルの新しい方法がnewEloquentBuilder
リファレンスと呼ばれ、モデル自体にローカルスコープを使用する代わりに、新しい専用クラスを作成するためのサポートを追加できます。
何らかの理由でそれらを生成することが望ましくない場合(各列に1つ)、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
たとえば、移行における流fluentな方法のphpdocsサポートが必要な場合
$ table -> string ( " somestring " )-> nullable ()-> index ();
ベンダーを公開した後、 config/ide-helper.php
ファイルのinclude_fluent
行を次のものに変更するだけです。
' include_fluent ' => true ,
次に、 php artisan ide-helper:generate
を実行します。
factory()->create()
およびfactory()->make()
メソッドが正しいモデルクラスを返す場合、 config/ide-helper.php
ファイルのinclude_factory_builders
ラインを使用してカスタムファクトリービルダーを有効にすることができます。 Laravel 8または最新の場合は非難されています。
' include_factory_builders ' => true ,
これを機能させるには、phpstormメタファイルも公開する必要があります(以下を参照)。
工場出荷時の設計パターンのサポートを追加するために、phpstormメタファイルを生成することができます。 Laravelの場合、これは、IOCコンテナからどのようなオブジェクトを解決しているかをphpstormに理解させることができることを意味します。たとえば、 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
がインデックス化されていることを確認する必要がある場合があります。注:datalexception:class not not configを受け取ったら、構成を確認します(たとえば、S3を構成していないときにクラウドドライバーとしてs3を削除します。使用しないときにredis serviceproviderを削除します)。
config meta_filename
を介して生成されたファイル名を変更できます。これは.phpstorm.meta.php/
:配置されたすべてのファイルのサポートを利用したい場合に役立ちます。
Laravel IDEヘルパージェネレーターは、MITライセンスの下でライセンスされているオープンソースソフトウェアです