เสร็จสมบูรณ์ phpDocs โดยตรงจากแหล่งที่มา
แพ็คเกจนี้สร้างไฟล์ตัวช่วยที่เปิดใช้งาน IDE ของคุณเพื่อให้การเติมข้อความอัตโนมัติที่แม่นยำ Generation จะทำตามไฟล์ในโครงการของคุณดังนั้นจึงเป็นที่ทันสมัยอยู่เสมอ
สาขา 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 "
]
}
}
providers
ใน config/app.php
: 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
- รุ่น PhpDOC สำหรับ laravel facadesphp artisan ide-helper:models
- PHPDOCS สำหรับรุ่นphp artisan ide-helper:meta
- ไฟล์ META PHPSTORMหมายเหตุ: คุณต้องการ codecomplice สำหรับข้อความประเสริฐ: https://github.com/spectacles/codecomplice
ตอนนี้คุณสามารถสร้างเอกสารด้วยตัวเองอีกครั้ง (สำหรับการอัปเดตในอนาคต)
php artisan ide-helper:generate
หมายเหตุ: bootstrap/compiled.php
จะต้องล้างก่อนดังนั้นเรียกใช้ php artisan clear-compiled
ก่อนที่จะสร้าง
สิ่งนี้จะสร้างไฟล์ _ide_helper.php
ซึ่งคาดว่าจะได้รับการแยกวิเคราะห์เพิ่มเติมโดย IDE ของคุณสำหรับการเติมข้อความอัตโนมัติ คุณสามารถใช้ filename
config เพื่อเปลี่ยนชื่อ
คุณสามารถกำหนดค่า composer.json
ให้ทำสิ่งนี้ทุกครั้งที่คุณอัปเดตการอ้างอิงของคุณ:
"scripts" : {
"post-update-cmd" : [
"Illuminate\Foundation\ComposerScripts::postUpdate" ,
"@php artisan ide-helper:generate" ,
"@php artisan ide-helper:meta"
]
} ,
นอกจากนี้คุณยังสามารถเผยแพร่ไฟล์ config เพื่อเปลี่ยนการใช้งาน (เช่นอินเตอร์เฟสไปยังคลาสเฉพาะ) หรือตั้งค่าเริ่มต้นสำหรับ --helpers
php artisan vendor:publish --provider= " BarryvdhLaravelIdeHelperIdeHelperServiceProvider " --tag=config
เครื่องกำเนิดไฟฟ้าพยายามระบุคลาสจริง แต่ถ้าไม่พบคุณสามารถกำหนดได้ในไฟล์กำหนดค่า
บางคลาสต้องการการเชื่อมต่อฐานข้อมูลที่ใช้งานได้ หากคุณไม่ได้มีการเชื่อมต่อการทำงานเริ่มต้นจะไม่รวมอยู่ในอาคารบางส่วน คุณสามารถใช้ไดรเวอร์ SQLite ในหน่วยความจำได้โดยเพิ่มตัวเลือก -M
หากคุณใช้อาคารแบบเรียลไทม์ในแอพของคุณสิ่งเหล่านั้นจะรวมอยู่ในไฟล์ที่สร้างขึ้นโดยใช้คำอธิบายประกอบ @mixin
และขยายคลาสดั้งเดิมใต้ซุ้ม
หมายเหตุ : คุณสมบัตินี้ใช้ไฟล์หน้าแบบเรียลไทม์ที่สร้างขึ้นในโฟลเดอร์ storage/framework/cache
ไฟล์เหล่านั้นถูกสร้างขึ้นตามความต้องการในขณะที่คุณใช้ซุ้มเรียลไทม์ดังนั้นหากเฟรมเวิร์กไม่ได้สร้างขึ้นก่อนจะไม่รวมอยู่ในไฟล์ผู้ช่วย เรียกใช้เส้นทาง/คำสั่ง/รหัสก่อนจากนั้นสร้างไฟล์ Helper ใหม่และคราวนี้จะรวมซุ้มเรียลไทม์ไว้ในนั้น
คุณสามารถเลือกที่จะรวมไฟล์ผู้ช่วย สิ่งนี้ไม่ได้เปิดใช้งานตามค่าเริ่มต้น แต่คุณสามารถแทนที่ด้วยตัวเลือก --helpers (-H)
Illuminate/Support/helpers.php
ได้รับการตั้งค่าแล้ว แต่คุณสามารถเพิ่ม/ลบไฟล์ของคุณเองในไฟล์ config
แพ็คเกจนี้สามารถสร้าง pHPDOCs สำหรับมาโครและ mixins ซึ่งจะเพิ่มลงในไฟล์ _ide_helper.php
แต่สิ่งนี้จะใช้ได้ก็ต่อเมื่อคุณใช้คำแนะนำประเภทเมื่อประกาศมาโคร
Str :: macro ( ' concat ' , function ( string $ str1 , string $ str2 ) : string {
return $ str1 . $ str2 ;
});
หากคุณไม่ต้องการเขียนคุณสมบัติของคุณด้วยตัวคุณเองคุณสามารถใช้คำสั่ง php artisan ide-helper:models
ในการสร้าง PHPDOCs ตามคอลัมน์ตารางความสัมพันธ์และ getters/setters
หมายเหตุ: คำสั่งนี้ต้องการการเชื่อมต่อฐานข้อมูลที่ใช้งานได้เพื่อเข้าร่วมตารางของแต่ละรุ่น
โดยค่าเริ่มต้นคุณจะถูกขอให้เขียนทับหรือเขียนไปยังไฟล์แยกต่างหาก ( _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 "
คุณสามารถเผยแพร่ไฟล์ config ( php artisan vendor:publish
) และตั้งค่าไดเรกทอรีเริ่มต้น
โมเดลสามารถละเว้นโดยใช้ตัวเลือก --ignore (-I)
php artisan ide-helper:models --ignore= " AppModelsPost,AppModelsUser "
หรือสามารถละเว้นได้โดยการตั้งค่าการกำหนดค่า ignored_models
' ignored_models ' => [
App Post ::class,
Api User ::class
],
where*
วิธีการ ELOOQUENT อนุญาตให้โทรหา where<Attribute>
ในโมเดลของคุณเช่น Post::whereTitle(…)
และแปลสิ่งนี้โดยอัตโนมัติเป็น Post::where('title', '=', '…')
หากมีเหตุผลบางอย่างที่ไม่พึงประสงค์ที่จะสร้างพวกเขา (หนึ่งสำหรับแต่ละคอลัมน์) คุณสามารถปิดการใช้งานนี้ผ่าน config write_model_magic_where
และตั้งค่าเป็น false
*_count
คุณสามารถใช้ ::withCount
Method เพื่อนับจำนวนผลลัพธ์จากความสัมพันธ์โดยไม่ต้องโหลดจริง ผลลัพธ์เหล่านั้นจะถูกวางไว้ในแอตทริบิวต์ต่อไปนี้การประชุม <columname>_count
โดยค่าเริ่มต้นแอตทริบิวต์เหล่านี้จะถูกสร้างขึ้นใน PHPDOC คุณสามารถปิดได้โดยการตั้งค่า config write_model_relation_count_properties
เป็น false
Laravel 9 แนะนำคำอธิบายประกอบทั่วไปใน docblocks สำหรับคอลเลกชัน PHPSTORM 2022.3 และข้างต้นสนับสนุนการใช้คำอธิบายประกอบทั่วไปภายใน @property
และ @property-read
ใน DOCBLOCKS เช่น Collection<User>
แทนที่จะเป็น Collection|User[]
สิ่งเหล่านี้สามารถปิดการใช้งานได้โดยการตั้งค่า config use_generics_annotations
เป็น false
@comment
ตาม DOBBLOCK เพื่อให้การสนับสนุน IDES ความสัมพันธ์และ getters/setters ดีขึ้นสามารถเพิ่มความคิดเห็นไปยังคุณสมบัติเช่นคอลัมน์ตาราง ดังนั้นจึงใช้ 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 ();
หลังจากเผยแพร่ผู้ขายเพียงแค่เปลี่ยนบรรทัด include_fluent
ในไฟล์ config/ide-helper.php
ของคุณเป็น:
' include_fluent ' => true ,
จากนั้นเรียกใช้ php artisan ide-helper:generate
ตอนนี้คุณจะเห็นวิธีการทั้งหมดที่ได้รับการยอมรับจาก IDE ของคุณ
หากคุณต้องการ factory()->create()
และ factory()->make()
เพื่อส่งคืนคลาสโมเดลที่ถูกต้องคุณสามารถเปิดใช้งานผู้สร้างโรงงานที่กำหนดเองด้วยบรรทัด include_factory_builders
ในไฟล์ config/ide-helper.php
ของคุณ . เลิกใช้สำหรับ Laravel 8 หรือล่าสุด
' include_factory_builders ' => true ,
สำหรับสิ่งนี้ในการทำงานคุณต้องเผยแพร่ไฟล์ Meta PHPSTORM (ดูด้านล่าง)
เป็นไปได้ที่จะสร้างไฟล์ Meta PHPSTORM เพื่อเพิ่มการสนับสนุนสำหรับรูปแบบการออกแบบโรงงาน สำหรับ 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 เมื่อคุณไม่ได้ใช้)
คุณสามารถเปลี่ยนชื่อไฟล์ที่สร้างขึ้นผ่านการกำหนดค่า meta_filename
สิ่งนี้มีประโยชน์สำหรับกรณีที่คุณต้องการใช้ประโยชน์จากการสนับสนุนของ PHPSTORM ของ ไดเรกทอรี .phpstorm.meta.php/
: ไฟล์ทั้งหมดที่วางอยู่มีการแยกวิเคราะห์หากคุณต้องการจัดเตรียมไฟล์เพิ่มเติมให้กับ PHPStorm
เครื่องกำเนิดผู้ช่วย Laravel IDE เป็นซอฟต์แวร์ที่ได้รับอนุญาตแบบเปิดโล่งภายใต้ใบอนุญาต MIT