Pembangunan pek pengembangan
~
- Temui pek pengembangan semula
- Penemuan terpilih pek pengembangan
- Tatarajah
- Pelanjutan konfigurasi lalai pakej
- Penghalaan Pek bahasa
- Lihat pek bahasa
- Terbitkan paparan
- Pembangunan Pek Sambungan
- KonfigurasiLaluan
- Pek bahasa
- Lihat
- Arahan
- Fail sumber awam
- Pengenalan Pakej Sambungan adalah cara utama untuk menambah fungsi pada Laravel. Pakej sambungan boleh mengandungi banyak ciri berguna, seperti lanjutan pemprosesan masa
- Carbon, atau pakej sambungan Behat yang menyediakan rangka kerja ujian BDD yang lengkap.
Sudah tentu, terdapat banyak jenis pek pengembangan. Sesetengah sambungan adalah kendiri, bermakna ia boleh digunakan dengan mana-mana rangka kerja PHP. Karbon dan Behat ialah pek pengembangan kendiri sedemikian. Untuk menggunakan pakej sambungan ini dalam Laravel, anda hanya perlu memperkenalkannya dalam fail - . Sebaliknya, sesetengah pakej sambungan hanya boleh digunakan dalam Laravel. Pakej sambungan ini mungkin mengandungi fail yang direka khusus untuk meningkatkan laluan, pengawal, paparan dan konfigurasi aplikasi Laravel anda. Panduan ini terutamanya memperkenalkan pembangunan pakej sambungan Laravel.
- Nota Fasad
Orkestra Testbench.
Temui pakej sambungan
Dalam fail konfigurasi config/app.php
aplikasi Laravel, pilihan pembekal
mentakrifkan senarai penyedia perkhidmatan yang boleh dimuatkan oleh Laravel . Apabila seseorang memasang sambungan anda, anda perlu memasukkan pembekal perkhidmatan anda dalam senarai ini. Daripada meminta pengguna menambah pembekal perkhidmatan anda secara manual pada senarai, anda boleh mentakrifkan pembekal perkhidmatan anda ke dalam bahagian tambahan
pada fail composer.json
pakej sambungan anda. Sebagai tambahan kepada pembekal perkhidmatan, anda juga boleh menyenaraikan semua fasad yang anda ingin daftarkan: config/app.php
配置文件中,providers
选项定义了能够被 Laravel 加载的服务提供者列表。当有人安装你的扩展包时,你需要将你的服务提供者包含到这个列表中。你可以将服务提供者定义到扩展包的 composer.json
文件中的 extra
部分,而不是让用户手动将你的服务提供者添加到列表中。除了服务提供者,还可以列出所有你想注册的 facades:
"extra": { "laravel": { "providers": [ "Barryvdh\Debugbar\ServiceProvider" ], "aliases": { "Debugbar": "Barryvdh\Debugbar\Facade" } } },
一旦你的扩展包配置为可发现,Laravel 就会在安装时自动注册扩展包的服务提供者和 facades,为扩展包的用户提供一个友好的安装体验。
选择性的发现扩展包
如果你是扩展包的用户,想要禁止一个扩展包被发现,你可以在应用的 composer.json
文件中的 extra
部分列出这个扩展包:
"extra": { "laravel": { "dont-discover": [ "barryvdh/laravel-debugbar" ] } },
你也可以通过在应用的 dont-discover
指令中使用 *
字符,禁用扩展包发现功能:
"extra": { "laravel": { "dont-discover": [ "*" ] } },
服务提供者
服务提供者 让你的扩展包与 Laravel 联系在一起。服务提供者负责将一些东西绑定到 Laravel 的 服务容器 中,并且告诉 Laravel 从哪里加载扩展包的资源文件,例如视图、配置文件、语言包等。
服务提供者继承了 IlluminateSupportServiceProvider
类,并包含了两个方法:register
和 boot
。基类 ServiceProvider
位于名为 illuminate/support
的 Composer 扩展包中,你必须将它加入到你的扩展包依赖。想要了解更多关于服务提供者的结构和用途,请查阅 它的文档.
资源文件
配置
有时,你需要将扩展包配置文件发布到应用本身的 config
目录中。这样使用扩展包的用户就可以轻松的重写默认配置项。想要发布扩展包配置文件,只需要在服务提供者的 boot
方法中调用 publishes
方法即可:
/** * 在注册后启动服务。 * * @return void */ public function boot(){ $this->publishes([ __DIR__.'/path/to/config/courier.php' => config_path('courier.php'), ]); }
现在,当扩展包的用户执行 Laravel 的 vendor:publish
命令,扩展包文件就会被复制到指定的目录中。当然,一旦你的配置文件被发布,就可以如同其他配置一样被访问:
$value = config('courier.option');
{note} 你不应该在配置文件中定义闭包函数。因为当用户执行
config:cache
/** * 在容器中注册绑定。 * * @return void */ public function register(){ $this->mergeConfigFrom( __DIR__.'/path/to/config/courier.php', 'courier' ); }Setelah pakej sambungan anda dikonfigurasikan untuk ditemui, Laravel akan mendaftarkan pembekal perkhidmatan dan fasad pakej sambungan secara automatik semasa pemasangan, seperti yang disediakan oleh pakej sambungan. pengalaman pemasangan yang mesra pengguna.
Penemuan terpilih pek pengembangan
extra
pada fail composer.json
aplikasi: 🎜/** * 在注册后启动服务。 * * @return void */ public function boot(){ $this->loadRoutesFrom(__DIR__.'/routes.php'); }🎜Anda juga boleh menggunakan
dont-discover
aplikasi. *
aksara dalam arahan untuk melumpuhkan fungsi penemuan pakej pengembangan: 🎜/** * 在注册后启动服务。 * * @return void */ public function boot(){ $this->loadMigrationsFrom(__DIR__.'/path/to/migrations'); }🎜🎜
IlluminateSupportServiceProvider
dan mengandungi dua kaedah: register
dan boot
. Kelas asas ServiceProvider
terletak dalam pakej sambungan Komposer bernama illuminate/support
dan anda mesti menambahkannya pada kebergantungan pakej sambungan anda. Untuk mengetahui lebih lanjut tentang struktur dan tujuan pembekal perkhidmatan, rujuk dokumentasinya 🎜🎜🎜Konfigurasi
🎜Kadangkala, anda perlu menambah sambungan Konfigurasi pakej fail diterbitkan ke direktoriconfig
aplikasi itu sendiri. Dengan cara ini, pengguna yang menggunakan pakej sambungan boleh dengan mudah mengatasi item konfigurasi lalai. Untuk menerbitkan fail konfigurasi pakej pengembangan, anda hanya perlu memanggil kaedah menerbitkan
dalam kaedah boot
pembekal perkhidmatan: 🎜/** * 在注册后启动服务。 * * @return void */ public function boot(){ $this->loadTranslationsFrom(__DIR__.'/path/to/translations', 'courier'); }🎜Sekarang, apabila pengguna pakej pengembangan melaksanakan Perintah
vendor:publish
Laravel, fail pakej sambungan akan disalin ke direktori yang ditentukan. Sudah tentu, sebaik sahaja fail konfigurasi anda diterbitkan, ia boleh diakses seperti mana-mana konfigurasi lain: 🎜echo trans('courier::messages.welcome');
🎜{note} Anda tidak seharusnya menentukan fungsi penutupan dalam fail konfigurasi. Kerana apabila pengguna melaksanakan perintahconfig:cache
Artisan, fail konfigurasi tidak akan bersiri dengan betul. 🎜🎜🎜🎜Konfigurasi lalai pakej sambungan
Anda juga boleh menggabungkan konfigurasi lalai pakej pengembangan dengan konfigurasi salinan aplikasi. Ini membolehkan pengguna pek sambungan mentakrifkan pilihan konfigurasi yang ingin mereka ganti dalam fail konfigurasi replika. Untuk menggabungkan konfigurasi, hanya panggil kaedah
mergeConfigFrom
dalam kaedahregister
pembekal perkhidmatan:register
方法中调用mergeConfigFrom
方法即可:/** * 在注册后启动服务。 * * @return void */ public function boot(){ $this->loadTranslationsFrom(__DIR__.'/path/to/translations', 'courier'); $this->publishes([ __DIR__.'/path/to/translations' => resource_path('lang/vendor/courier'), ]); }{note} 此方法只合并配置数组的第一维。如果扩展包用户定义了多维配置数组,缺少的选项将不会被合并。
路由
如果你的扩展包中包含路由文件,你需要使用
loadRoutesFrom
方法加载他们。此方法将自动判断应用的路由是否已被缓存,如果路由已缓存,将不会加载你的路由文件:/** * 在注册后启动服务。 * * @return void */ public function boot(){ $this->loadViewsFrom(__DIR__.'/path/to/views', 'courier'); }数据库迁移
如果你的扩展包中包含 数据库迁移,你需要使用
loadMigrationsFrom
方法告知 Laravel 如何加载他们。loadMigrationsFrom
方法只需要扩展包迁移文件路径作为唯一参数:Route::get('admin', function () { return view('courier::admin'); });一旦你的扩展包迁移文件被注册,当运行
php artisan migrate
命令时他们就会被自动执行。你不需要将他们导入到应用的database/migrations
目录中。语言包
如果你的扩展包中包含 语言包文件,你需要使用
loadTranslationsFrom
方法告知 Laravel 如何加载他们。例如,如果你的扩展包名为courier
,你需要将下面的内容加入到服务提供者的boot
方法中:/** * 在注册后启动服务。 * * @return void */ public function boot(){ $this->loadViewsFrom(__DIR__.'/path/to/views', 'courier'); $this->publishes([ __DIR__.'/path/to/views' => resource_path('views/vendor/courier'), ]); }扩展包翻译约定使用
package::file.line
语法进行引用。因此,你可以按照下面的方式来加载courier
扩展包中的messages
文件的welcome
行:/** * 引导应用服务。 * * @return void */ public function boot(){ if ($this->app->runningInConsole()) { $this->commands([ FooCommand::class, BarCommand::class, ]); } }发布语言包
如果你想要将扩展包中的语言包发布到应用的
resources/lang/vendor
目录,可以使用服务提供者的publishes
方法。publishes
方法接收一个包含语言包路径和对应发布位置的数组。例如,发布courier
扩展包的语言包文件,操作如下:/** * 在注册后启动服务。 * * @return void */ public function boot(){ $this->publishes([ __DIR__.'/path/to/assets' => public_path('vendor/courier'), ], 'public'); }现在,当扩展包的用户执行 Laravel 的
vendor:publish
php artisan vendor:publish --tag=public --force{note} Kaedah ini hanya menggabungkan tatasusunan konfigurasi dimensi pertama. Jika pengguna sambungan mentakrifkan tatasusunan konfigurasi berbilang dimensi, pilihan yang hilang tidak akan digabungkan.Jika pakej sambungan anda mengandungi fail penghalaan , anda perlu menggunakan kaedahLaluan
loadRoutesFrom
untuk memuatkannya. Kaedah ini secara automatik akan menentukan sama ada laluan yang digunakan telah dicache Jika laluan telah dicache, fail laluan anda tidak akan dimuatkan: 🎜/** * 在注册后启动服务。 * * @return void */ public function boot(){ $this->publishes([ __DIR__.'/../config/package.php' => config_path('package.php') ], 'config'); $this->publishes([ __DIR__.'/../database/migrations/' => database_path('migrations') ], 'migrations'); }🎜🎜🎜🎜Migrasi Pangkalan Data
🎜Jika pakej sambungan anda mengandungi migrasi pangkalan data, anda perlu menggunakan kaedahloadMigrationFrom
untuk memberitahu Laravel cara memuatkannya. KaedahloadMigrationsFrom
hanya memerlukan laluan ke fail migrasi pek pengembangan sebagai satu-satunya hujah: 🎜php artisan vendor:publish --tag=config🎜Setelah fail migrasi pek pengembangan anda didaftarkan, ia akan dijana apabilaphp artisan migrate< /code> arahan dijalankan dilaksanakan secara automatik. Anda tidak perlu mengimportnya ke dalam direktori
database/migration
aplikasi anda. 🎜🎜🎜🎜🎜Pek bahasa
🎜Jika pek pengembangan anda mengandungi fail pek bahasa, anda perlu untuk menggunakan kaedahloadTranslationsFrom
untuk memberitahu Laravel cara memuatkannya. Contohnya, jika pakej sambungan anda dinamakancourier
, anda perlu menambah kandungan berikut pada kaedahboot
pembekal perkhidmatan: 🎜rrreee🎜Konvensyen terjemahan pakej sambungan menggunakan < code >pakej::file.line sintaks untuk rujukan. Oleh itu, anda boleh memuatkan barisselamat datang
failmessage
dalam pakej sambungancourier
seperti berikut: 🎜rrreee🎜🎜Terbitkan pek bahasa🎜🎜Jika anda ingin menerbitkan pek bahasa dalam pakej sambungan ke direktorisumber/lang/vendor
aplikasi, anda boleh menggunakan pembekal perkhidmatan Kaedahmenerbitkan
. Kaedahmenerbitkan
menerima tatasusunan yang mengandungi laluan ke pek bahasa dan lokasi penerbitan yang sepadan. Sebagai contoh, untuk menerbitkan fail pek bahasa bagi pakej sambungancourier
, operasinya adalah seperti berikut: 🎜rrreee🎜Sekarang, apabila pengguna pakej sambungan melaksanakanvendor:publish Laravel kod> Perintah Artisan, pakej bahasa akan diterbitkan ke direktori yang ditentukan. 🎜🎜🎜🎜🎜🎜🎜
sintaks untuk rujukan. Oleh itu, setelah laluan paparan berjaya didaftarkan dengan pembekal perkhidmatan, anda boleh menggunakan kaedah berikut untuk memuatkan paparanLihat
Jika anda ingin mendaftarkan paparan pakej sambungan anda dalam Laravel, anda perlu memberitahu Laravel lokasi fail paparan. Anda boleh melakukan ini menggunakan kaedah
rrreeeloadViewsFrom
pembekal perkhidmatan. KaedahloadViewsFrom
membenarkan untuk menerima dua parameter: lihat laluan templat dan nama pakej sambungan. Contohnya, jika pakej sambungan anda dinamakancourier
, anda perlu menambah kandungan berikut pada kaedahboot
pembekal perkhidmatan:loadViewsFrom
方法来实现。loadViewsFrom
方法允许接收两个参数:视图模板路径和扩展包名。例如,如果你的扩展包名为courier
,你需要将下面的内容加入到服务提供者的boot
方法中:扩展包视图约定使用
rrreeepackage::view
语法进行引用。因此,一旦视图路径在服务提供者中注册成功,你可以使用下面的方式来加载courier
扩展包中的admin
视图:重写扩展包视图
当你使用
loadViewsFrom
方法时,Laravel 实际上在两个位置注册视图:应用的resources/views/vendor
目录和你的自定义目录。所以,还以courier
扩展包为例,Laravel 首先会检查开发人员是否在resources/views/vendor/courier
中提供了一个自定义版本的视图。然后,如果视图尚未被定义,Laravel 将会搜索在loadViewsFrom
中定义的视图目录。这种方法可以让用户很简单的自定义或重写扩展包的视图。发布视图
如果你希望将你的视图发布到应用的
rrreeeresources/views/vendor
目录中,可以使用服务提供者的publishes
方法。publishes
方法接收一个包含视图路径和对应发布位置的数组:现在,当扩展包的用户执行 Laravel 的
vendor:publish
Artisan 命令,视图将会被发布到自定的目录中。命令
想要在 Laravel 中注册扩展包的 Artisan 命令,需要使用
rrreeecommands
方法。此方法接收一个命令类的数组。一旦这些命令注册成功,可以使用 Artisan 命令行 执行他们:公共资源文件
你的扩展包中可能存在 JavaScript、CSS 和图片之类的资源文件。想要发布这些资源文件到应用的
rrreeepublic
目录,可以使用服务提供者的publishes
方法。在下面的例子中,我们也可以添加一个public
资源分类标签,可用于相关发布资源的分类:现在,当扩展包的用户执行
Konvensyen paparan pakej sambungan menggunakan < code >pakej::lihatvendor:publish
命令,你的资源文件将会被复制到指定的目录中。由于每次更新扩展包时通常都需要覆盖资源文件,因此需要使用--force
rrreeeadmin
dalam pakej sambungancourier
:rrreee
Menulis semula paparan pakej sambungan
Apabila anda menggunakan kaedahloadViewsFrom
, Laravel sebenarnya mendaftarkan paparan di dua tempat: aplikasi < direktori kod>sumber/pandangan/vendor dan direktori tersuai anda. Jadi, dengan mengambil pakej sambungancourier
sebagai contoh, Laravel akan menyemak dahulu sama ada pembangun telah menyediakan versi paparan tersuai dalamresources/views/vendor/courier
. Kemudian, jika paparan belum ditakrifkan lagi, Laravel akan mencari direktori paparan yang ditakrifkan dalamloadViewsFrom
. Pendekatan ini membolehkan pengguna menyesuaikan atau mengatasi paparan pakej sambungan dengan mudah.Jika anda ingin menerbitkan paparan anda keTerbitkan Paparan
sumber/pandangan/vendor
apl anda Dalam direktori, anda boleh menggunakan kaedahpublishes
pembekal perkhidmatan. Kaedahmenerbitkan
menerima tatasusunan yang mengandungi laluan paparan dan lokasi penerbitan yang sepadan: 🎜rrreee🎜Sekarang, apabila pengguna pakej sambungan melaksanakan perintah Artisanvendor:publish
Laravel, paparan akan Diterbitkan ke direktori tersuai. 🎜🎜🎜🎜🎜Arahan
🎜Jika anda ingin mendaftar perintah Artisan bagi pakej sambungan dalam Laravel, anda perlu Gunakan kaedahcommands
. Kaedah ini menerima pelbagai kelas arahan. Setelah arahan ini berjaya didaftarkan, ia boleh dilaksanakan menggunakan baris arahan Artisan: 🎜rrreee🎜🎜🎜🎜🎜Fail aset awam
🎜Mungkin terdapat fail sumber seperti JavaScript, CSS dan imej dalam pakej sambungan anda. Untuk menerbitkan fail sumber ini ke direktoripublic
aplikasi, anda boleh menggunakan kaedahpublishes
pembekal perkhidmatan. Dalam contoh di bawah, kami juga boleh menambah teg klasifikasi sumberpublic
, yang boleh digunakan untuk mengklasifikasikan sumber yang diterbitkan berkaitan: 🎜rrreee🎜Sekarang, apabila pengguna pakej sambungan melaksanakanvendor: publish code> perintah, fail sumber anda akan disalin ke direktori yang ditentukan. Memandangkan fail sumber biasanya perlu ditimpa setiap kali pek pengembangan dikemas kini, tag
--force
perlu digunakan: 🎜rrreee🎜🎜🎜🎜🎜🎜Terbitkan fail kumpulan
Anda mungkin mahu membungkus dan menerbitkan fail sumber atau sumber pek pengembangan secara berasingan. Sebagai contoh, anda mungkin mahu pengguna menerbitkan fail konfigurasi dalam pakej sambungan secara individu, dan bukannya dipaksa untuk menerbitkan semua fail sumber dalam pakej sambungan. Anda boleh "meneg" fail yang berbeza dengan memanggil kaedah
rrreeemenerbitkan
dalam pembekal perkhidmatan pakej sambungan. Sebagai contoh, mari gunakan kaedahboot
dalam pembekal perkhidmatan pakej sambungan untuk mentakrifkan dua kumpulan penerbitan:publishes
方法给不同文件打上「标签」。例如,让我们使用扩展包服务提供者中的boot
方法来定义两个发布群组:现在你的用户就可以通过执行
Kini pengguna anda boleh melaksanakan Perintahvendor:publish
rrreeevendor:publish
untuk menerbitkan kumpulan berbeza fail berdasarkan tag yang ditentukan:rrreeeArtikel ini pertama kali diterbitkan di tapak web LearnKu.com.Laman web PHP Cina