Lengkapi PHPDOCS, langsung dari sumbernya
Paket ini menghasilkan file helper yang memungkinkan IDE Anda untuk memberikan pelengkapan otomatis yang akurat. Generasi dilakukan berdasarkan file dalam proyek Anda, sehingga selalu terkini.
Cabang 3.x mendukung Laravel 10 dan 11. Untuk versi yang lebih lama, gunakan rilis 2.x.
Membutuhkan paket ini dengan komposer menggunakan perintah berikut:
composer require --dev barryvdh/laravel-ide-helper
Catatan
Jika Anda menemukan versi konflik dengan doktrin/dbal, silakan coba: composer require --dev barryvdh/laravel-ide-helper --with-all-dependencies
Paket ini memanfaatkan mekanisme paket-penemuan otomatis Laravels, yang berarti jika Anda tidak menginstal dependensi dev dalam produksi, itu juga tidak akan dimuat.
Jika karena alasan tertentu Anda ingin mengontrol ini secara manual ini:
extra.laravel.dont-discover
di composer.json
, misalnya "extra" : {
"laravel" : {
"dont-discover" : [
" barryvdh/laravel-ide-helper "
]
}
}
providers
di config/app.php
: Barryvdh LaravelIdeHelper IdeHelperServiceProvider ::class,
AppServiceProvider
Anda dengan metode register()
: public function register ()
{
if ( $ this -> app -> isLocal ()) {
$ this -> app -> register ( Barryvdh LaravelIdeHelper IdeHelperServiceProvider ::class);
}
// ...
}
Catatan: Hindari caching konfigurasi di lingkungan pengembangan Anda, dapat menyebabkan masalah setelah menginstal paket ini; masing -masing hapus cache sebelumnya melalui
php artisan cache:clear
jika Anda menghadapi masalah saat menjalankan perintah
Lihat video Laracasts ini untuk pengantar/penjelasan cepat!
php artisan ide-helper:generate
- Generasi PHPDOC untuk fasad Laravelphp artisan ide-helper:models
- PHPDOCS untuk modelphp artisan ide-helper:meta
- File Meta PHPSTormCatatan: Anda membutuhkan codecomplice untuk teks luhur: https://github.com/spectacles/codecomplice
Anda sekarang dapat menghasilkan kembali dokumen sendiri (untuk pembaruan di masa mendatang)
php artisan ide-helper:generate
Catatan: bootstrap/compiled.php
harus dibersihkan terlebih dahulu, jadi jalankan php artisan clear-compiled
sebelum menghasilkan.
Ini akan menghasilkan file _ide_helper.php
yang diharapkan juga diuraikan oleh IDE Anda untuk Autocomplete. Anda dapat menggunakan filename
config untuk mengubah namanya.
Anda dapat mengonfigurasi composer.json
Anda untuk melakukan ini setiap kali Anda memperbarui dependensi Anda:
"scripts" : {
"post-update-cmd" : [
"Illuminate\Foundation\ComposerScripts::postUpdate" ,
"@php artisan ide-helper:generate" ,
"@php artisan ide-helper:meta"
]
} ,
Anda juga dapat mempublikasikan file konfigurasi untuk mengubah implementasi (yaitu. Antarmuka ke kelas tertentu) atau mengatur default untuk --helpers
.
php artisan vendor:publish --provider= " BarryvdhLaravelIdeHelperIdeHelperServiceProvider " --tag=config
Generator mencoba mengidentifikasi kelas nyata, tetapi jika tidak dapat ditemukan, Anda dapat mendefinisikannya di file konfigurasi.
Beberapa kelas membutuhkan koneksi basis data yang berfungsi. Jika Anda tidak memiliki koneksi kerja default, beberapa fasad tidak akan dimasukkan. Anda dapat menggunakan driver SQLite dalam memori dengan menambahkan opsi -M
.
Jika Anda menggunakan fasad waktu-nyata di aplikasi Anda, itu juga akan dimasukkan dalam file yang dihasilkan menggunakan anotasi @mixin
dan memperluas kelas asli di bawah fasad.
Catatan : Fitur ini menggunakan file fasad waktu-nyata yang dihasilkan di folder storage/framework/cache
. File-file tersebut dihasilkan sesuai permintaan saat Anda menggunakan fasad real-time, jadi jika kerangka kerja belum menghasilkannya terlebih dahulu, itu tidak akan dimasukkan dalam file helper. Jalankan rute/perintah/kode terlebih dahulu dan kemudian meregenerasi file helper dan kali ini fasad waktu-nyata akan dimasukkan di dalamnya.
Anda dapat memilih untuk memasukkan file helper. Ini tidak diaktifkan secara default, tetapi Anda dapat menimpanya dengan opsi --helpers (-H)
. Illuminate/Support/helpers.php
sudah diatur, tetapi Anda dapat menambahkan/menghapus file Anda sendiri di file konfigurasi.
Paket ini dapat menghasilkan phpDocs untuk makro dan mixin yang akan ditambahkan ke file _ide_helper.php
.
Tetapi ini hanya berfungsi jika Anda menggunakan jenis petunjuk saat menyatakan makro.
Str :: macro ( ' concat ' , function ( string $ str1 , string $ str2 ) : string {
return $ str1 . $ str2 ;
});
Jika Anda tidak ingin menulis properti Anda sendiri, Anda dapat menggunakan perintah php artisan ide-helper:models
untuk menghasilkan PHPDOCS, berdasarkan kolom tabel, hubungan dan getters/setter.
Catatan: Perintah ini memerlukan koneksi basis data yang berfungsi untuk mengintrospeksi tabel setiap model
Secara default, Anda diminta untuk menimpa atau menulis ke file terpisah ( _ide_helper_models.php
). Anda dapat menulis komentar langsung ke file model Anda, menggunakan opsi --write (-W)
, atau memaksa untuk tidak menulis dengan --nowrite (-N)
.
Atau menggunakan opsi --write-mixin (-M)
hanya akan menambahkan tag mixin ke file model Anda, menulis sisanya di ( _ide_helper_models.php
). Nama kelas akan berbeda dari model, menghindari gangguan duplikat IDE.
Pastikan untuk mencadangkan model Anda, sebelum menulis info.
Menulis ke model harus menjaga komentar yang ada dan hanya menambahkan properti/metode baru. Itu tidak akan memperbarui properti/metode yang diubah.
Dengan opsi --reset (-R)
, seluruh PHPDOC yang ada diganti, termasuk komentar apa pun yang telah dibuat.
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)
* …
*/
Dengan opsi --write-mixin (-M)
/**
* …
* @mixin IdeHelperPost
*/
Secara default, model dalam app/models
dipindai. Argumen opsional memberi tahu model apa yang akan digunakan (juga aplikasi/model luar).
php artisan ide-helper:models " AppModelsPost " " AppModelsUser "
Anda juga dapat memindai direktori yang berbeda, menggunakan opsi --dir
(relatif dari jalur dasar):
php artisan ide-helper:models --dir= " path/to/models " --dir= " app/src/Model "
Anda dapat mempublikasikan file konfigurasi ( php artisan vendor:publish
) dan atur direktori default.
Model dapat diabaikan menggunakan opsi --ignore (-I)
php artisan ide-helper:models --ignore= " AppModelsPost,AppModelsUser "
Atau dapat diabaikan dengan mengatur konfigurasi ignored_models
' ignored_models ' => [
App Post ::class,
Api User ::class
],
where*
metode Fasih memungkinkan menelepon where<Attribute>
pada model Anda, misalnya Post::whereTitle(…)
dan secara otomatis menerjemahkan ini ke EG Post::where('title', '=', '…')
.
Jika karena alasan tertentu tidak diinginkan untuk membuatnya (satu untuk setiap kolom), Anda dapat menonaktifkannya melalui config write_model_magic_where
dan mengaturnya menjadi false
.
*_count
Properties Anda dapat menggunakan metode ::withCount
untuk menghitung hasil angka dari suatu hubungan tanpa benar -benar memuatnya. Hasil tersebut kemudian ditempatkan di atribut mengikuti Konvensi <columname>_count
.
Secara default, atribut ini dihasilkan dalam PHPDOC. Anda dapat mematikannya dengan mengatur config write_model_relation_count_properties
ke false
.
Laravel 9 memperkenalkan anotasi generik di docblocks untuk koleksi. PHPSTORM 2022.3 dan di atas mendukung penggunaan anotasi generik dalam @property
dan @property-read
di DocBlocks, misalnya Collection<User>
alih-alih Collection|User[]
.
Ini dapat dinonaktifkan dengan mengatur config use_generics_annotations
ke false
.
@comment
berdasarkan docblock Untuk mendukung IDE, Hubungan dan Pengambil/Setter yang lebih baik juga dapat menambahkan komentar ke properti seperti kolom tabel. Oleh karena itu docblock @comment
khusus digunakan:
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
* …
*/
Metode baru untuk model yang fasih ditambahkan yang disebut referensi newEloquentBuilder
di mana kami dapat menambahkan dukungan untuk membuat kelas khusus baru alih -alih menggunakan lingkup lokal dalam model itu sendiri.
Jika karena alasan tertentu tidak diinginkan untuk membuatnya (satu untuk setiap kolom), Anda dapat menonaktifkannya melalui config write_model_external_builder_methods
dan mengaturnya menjadi false
.
Jika Anda menggunakan hubungan yang tidak dibangun ke Laravel, Anda perlu menentukan nama dan kembali kelas dalam konfigurasi untuk mendapatkan generasi yang tepat.
' additional_relation_types ' => [
' externalHasMany ' => My Package externalHasMany::class
],
Hubungan yang ditemukan biasanya akan menghasilkan nilai pengembalian berdasarkan nama hubungan.
Jika hubungan khusus Anda tidak mengikuti skema penamaan tradisional ini, Anda dapat menentukan jenis pengembaliannya secara manual. Opsi yang tersedia many
dan morphTo
.
' additional_relation_return_types ' => [
' externalHasMultiple ' => ' many '
],
Jika Anda memerlukan informasi tambahan tentang model Anda dari sumber yang tidak ditangani secara default, Anda dapat menghubungkan ke proses pembuatan dengan kait model untuk menambahkan informasi tambahan dengan cepat. Cukup buat kelas yang mengimplementasikan ModelHookInterface
dan tambahkan ke array model_hooks
di konfigurasi:
' model_hooks ' => [
MyCustomHook ::class,
],
Metode run
akan dipanggil selama generasi untuk setiap model dan menerima ModelsCommand
yang sedang berjalan saat ini dan Model
saat ini, misalnya:
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
Jika Anda memerlukan dukungan phpDocs untuk metode fasih dalam migrasi, misalnya
$ table -> string ( " somestring " )-> nullable ()-> index ();
Setelah menerbitkan vendor, cukup ubah baris include_fluent
di file config/ide-helper.php
Anda menjadi:
' include_fluent ' => true ,
Kemudian jalankan php artisan ide-helper:generate
, Anda sekarang akan melihat semua metode fasih yang dikenali oleh IDE Anda.
Jika Anda ingin metode factory()->create()
dan factory()->make()
untuk mengembalikan kelas model yang benar, Anda dapat mengaktifkan pembangun pabrik kustom dengan baris include_factory_builders
di file config/ide-helper.php
Anda . Terkecar untuk Laravel 8 atau terbaru.
' include_factory_builders ' => true ,
Agar ini berfungsi, Anda juga harus mempublikasikan file meta phpstorm (lihat di bawah).
Dimungkinkan untuk menghasilkan file meta phpstorm untuk menambahkan dukungan untuk pola desain pabrik. Untuk Laravel, ini berarti kita dapat membuat phpstorm memahami jenis objek apa yang kita selesaikan dari wadah IOC. Misalnya, events
akan mengembalikan objek IlluminateEventsDispatcher
, jadi dengan file meta yang dapat Anda panggil app('events')
dan akan secara otomatis melengkapi metode dispatcher.
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);
Catatan: Anda mungkin perlu memulai kembali phpstorm dan memastikan
.phpstorm.meta.php
diindeks.Catatan: Ketika Anda menerima fatalException: kelas yang tidak ditemukan, periksa konfigurasi Anda (misalnya, hapus S3 sebagai driver cloud ketika Anda tidak memiliki S3 yang dikonfigurasi. Hapus Redis ServiceProvider saat Anda tidak menggunakannya).
Anda dapat mengubah nama file yang dihasilkan melalui meta_filename
konfigurasi. Ini dapat berguna untuk kasus -kasus di mana Anda ingin memanfaatkan dukungan phpstorm dari direktori .phpstorm.meta.php/
: semua file yang ditempatkan di sana diuraikan, jika Anda ingin memberikan file tambahan ke phpstorm.
Laravel Ide Helper Generator adalah perangkat lunak bersumber terbuka yang dilisensikan di bawah lisensi MIT