拡張パックの開発
- #拡張パックの発見
- 構成
- ##ルーティング
- データベース移行
- 言語パック
- 表示
- 拡張パッケージ ビューの書き換え
- ビューの公開
- ##公開リソース ファイル ##公開グループ ファイル
- #
拡張パッケージ開発
はじめに拡張パッケージは、Laravel に機能を追加する主な方法です。拡張パッケージには、時間処理拡張パッケージCarbon や完全な BDD テスト フレームワークを提供する拡張パッケージ Behat など、多くの便利な機能を含めることができます。
もちろん、拡張パックにはさまざまな種類があります。一部の拡張機能はスタンドアロンです。つまり、任意の PHP フレームワークで使用できます。 Carbon と Behat は、そのようなスタンドアロン拡張パックです。この拡張機能パッケージを Laravel で使用するには、composer.json
一方、拡張機能パッケージの中にはLaravelでのみ使用できるものもあります。これらの拡張パッケージには、Laravel アプリケーションのルート、コントローラー、ビュー、構成を強化するために特別に設計されたファイルが含まれている場合があります。このガイドでは主にLaravel拡張パッケージの開発について紹介します。 ファサードに関するメモLaravel アプリケーションを開発する場合、通常、コントラクトを使用するかファサードを使用するかの違いはありません。すべてが本質的に同じテスト容易性機能を提供します。ただし、拡張パッケージを開発する場合、拡張パッケージは Laravel が提供するすべてのテスト ヘルパー関数にアクセスできるわけではありません。 Laravel アプリケーションの場合と同様に、拡張機能パッケージのテスト ケースを作成する場合は、拡張機能パッケージファイルに拡張機能を導入するだけです。
Orchestral Testbench を使用できます。
拡張機能パッケージを確認する
Laravel アプリケーションの
config/app.php
構成ファイルで、providers
オプションは、拡張機能を利用できるサービス プロバイダーのリストを定義します。 Laravel によってロードされます。誰かが拡張機能をインストールするときは、サービス プロバイダーをこのリストに含める必要があります。ユーザーがサービス プロバイダーをリストに手動で追加する代わりに、拡張機能パッケージのcomposer.json
ファイルのextra
セクションにサービス プロバイダーを定義できます。サービスプロバイダーに加えて、登録したいすべてのファサードをリストすることもできます:"extra": { "laravel": { "providers": [ "Barryvdh\Debugbar\ServiceProvider" ], "aliases": { "Debugbar": "Barryvdh\Debugbar\Facade" } } },
拡張パッケージが検出可能に設定されると、Laravel はインストール中にサービスプロバイダーと拡張パッケージのファサードを自動的に登録します。拡張パック ユーザーに使いやすいインストール エクスペリエンスを提供します。
拡張パッケージの選択的検出
拡張パッケージ ユーザーで、拡張パッケージが検出されないようにしたい場合は、アプリケーションの ## で実行できます。 #composer .json
ファイルの
extraセクションには、次の拡張子がリストされています:
"extra": { "laravel": { "dont-discover": [ "barryvdh/laravel-debugbar" ] } },
アプリケーションのdont-discover
##サービス プロバイダーサービス プロバイダー 拡張機能を接続します。ララベルで。サービスプロバイダーは、Laravel のサービスコンテナに何かをバインドし、ビュー、設定ファイル、言語パックなどの拡張パッケージのリソースファイルをロードする場所を Laravel に指示する責任があります。 サービス プロバイダーは、ディレクティブで ## を使用することもできます # *
文字、拡張機能パッケージ検出機能を無効にします:"extra": { "laravel": { "dont-discover": [ "*" ] } },
Illuminate\Support\ServiceProvider
クラスを継承し、2 つのメソッド:register
リソース ファイル構成拡張パック構成ファイルをアプリケーション自体のと
bootを含みます。基本クラス
ServiceProviderは、
illuminate/supportという名前の Composer 拡張機能パッケージにあり、これを拡張機能パッケージの依存関係に追加する必要があります。サービス プロバイダーの構造と目的の詳細については、そのドキュメントを参照してください。
config
ディレクトリに公開する必要がある場合があります。このようにして、拡張機能パッケージを使用するユーザーは、デフォルトの構成項目を簡単にオーバーライドできます。拡張パッケージ構成ファイルを公開するには、サービス プロバイダーのboot
メソッドで
publishesメソッドを呼び出すだけです。 package Laravelの
vendor:publishコマンドを実行すると、指定したディレクトリに拡張機能パッケージファイルがコピーされます。もちろん、設定ファイルが公開されると、他の設定と同様にアクセスできます。
/** * 在注册后启动服务。 * * @return void */ public function boot(){ $this->publishes([ __DIR__.'/path/to/config/courier.php' => config_path('courier.php'), ]); }
{note} 設定ファイル内でクロージャ関数を定義しないでください。ユーザーが
config:cache
Artisan コマンドを実行すると、構成ファイルが正しくシリアル化されないためです。
拡張パック移行ファイルが登録されると、それらは拡張パッケージのデフォルト構成
拡張パッケージのデフォルト構成をアプリケーションのコピー構成とマージすることもできます。これにより、拡張パック ユーザーは、レプリカ構成ファイル内でオーバーライドする構成オプションを定義できるようになります。構成をマージするには、サービス プロバイダーの
register
メソッドでmergeConfigFrom
メソッドを呼び出すだけです。$value = config('courier.option');
{note} このメソッドは、最初のディメンションの構成のみをマージします。配列。拡張機能ユーザーが多次元構成配列を定義する場合、欠落しているオプションはマージされません。
ルーティング
拡張パッケージにルーティング ファイルが含まれている場合は、
を使用する必要があります。 loadRoutesFrom
メソッドによってそれらがロードされます。このメソッドは、適用されたルートがキャッシュされているかどうかを自動的に判断します。ルートがキャッシュされている場合、ルート ファイルはロードされません:/** * 在容器中注册绑定。 * * @return void */ public function register(){ $this->mergeConfigFrom( __DIR__.'/path/to/config/courier.php', 'courier' ); }
##データベース移行拡張パッケージにデータベース移行が含まれている場合は、loadMigrationsFrom
メソッドを使用して、データベース移行のロード方法を Laravel に指示する必要があります。
loadMigrationsFromメソッドには、唯一のパラメーターとして拡張パック移行ファイルのパスのみが必要です:
/** * 在注册后启动服务。 * * @return void */ public function boot(){ $this->loadRoutesFrom(__DIR__.'/routes.php'); }
php 職人の実行時に使用されます。移行
言語パック拡張パッケージに言語パック ファイルが含まれている場合は、コマンドが自動的に実行されます。これらをアプリケーションの
database/migrationsディレクトリにインポートする必要はありません。
loadTranslationsFrom #を使用する必要があります。 ## メソッドは、Laravel にそれらをロードする方法を指示します。たとえば、拡張パッケージの名前が
package::file.linecourier
である場合、次の内容をサービス プロバイダーのboot
メソッドに追加する必要があります。
拡張パッケージの変換規則/** * 在注册后启动服务。 * * @return void */ public function boot(){ $this->loadMigrationsFrom(__DIR__.'/path/to/migrations'); }
参照する構文。したがって、
#言語パックの発行拡張パッケージ内の言語パックをアプリケーションのcourier
拡張パッケージのmessages
ファイルのwelcome
行を次のようにロードできます。/** * 在注册后启动服务。 * * @return void */ public function boot(){ $this->loadTranslationsFrom(__DIR__.'/path/to/translations', 'courier'); }
resources/lang/vendor
ディレクトリに発行する場合は、サービス プロバイダーのpublishes# # # 方法。
publishes
このメソッドは、言語パックのパスと対応する発行場所を含む配列を受け取ります。たとえば、courier
拡張パッケージの言語パック ファイルを公開するには、操作は次のようになります。
ここで、拡張パッケージのユーザーが Laravel のecho trans('courier::messages.welcome');
vendor を実行すると、次のようになります。 public
アーティザン コマンド、言語 パッケージは指定されたディレクトリに公開されます。
##グループ ファイルの公開
拡張パックのリソース ファイルまたはリソースを個別にパッケージ化して公開したい場合があります。たとえば、ユーザーが拡張機能パッケージ内のすべてのリソース ファイルを強制的に公開するのではなく、拡張機能パッケージ内の構成ファイルを個別に公開できるようにしたい場合があります。拡張パッケージ サービス プロバイダーの
publishes
メソッドを呼び出すことで、さまざまなファイルに「タグを付ける」ことができます。たとえば、拡張パッケージ サービス プロバイダーのboot
メソッドを使用して、2 つの公開グループを定義してみましょう。php artisan vendor:publish --tag=public --force
これで、ユーザーは
vendor:publish
を実行することでこれを行うことができます。定義されたタグに基づいてさまざまなグループ ファイルを公開するコマンド:/** * 在注册后启动服务。 * * @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'); }
この記事は、LearnKu.com Web サイトで初めて公開されました。
- ##性的発見拡張パッケージの選択