ホームページ > バックエンド開発 > PHPチュートリアル > [ Laravel 5.2 ドキュメント ] サービス -- パッケージ開発

[ Laravel 5.2 ドキュメント ] サービス -- パッケージ開発

WBOY
リリース: 2016-06-20 12:37:47
オリジナル
1069 人が閲覧しました

1. はじめに

パッケージは、Laravel に機能を追加する主な方法です。パッケージは、Carbon のような日付の処理から Behat のような BDD テスト フレームワーク全体まで、あらゆるものを提供できます。

もちろんバッグにも色々な種類があります。一部のパッケージはスタンドアロンです。つまり、Laravel だけでなく、あらゆるフレームワークで使用できます。たとえば、Carbon と Behat は独立したパッケージです。これらのパッケージはすべて、composer.json ファイルでリクエストすることで、Laravel で使用できます。

一方、他のパッケージは Laravel でのみ使用できます。これらのパッケージには、Laravel アプリケーションの機能を強化するために使用されるルート、コントローラー、ビュー、構成が含まれる場合があります。この章では主に、これらのパッケージについて説明します。 Laravel Bagでのみ使用できます。

2. サービスプロバイダー

サービスプロバイダーは、パッケージと Laravel の間の接続ポイントです。サービスプロバイダーは、オブジェクトをLaravelのサービスコンテナにバインドし、ビュー、設定、ローカリゼーションファイルなどのパッケージリソースをロードする場所をLaravelに指示する責任があります。

サービス プロバイダーは IlluminateSupportServiceProvider クラスを継承し、register と boot という 2 つのメソッドが含まれています。 ServiceProvider 基本クラスは、Composer パッケージluminut/supportにあります。

サービス プロバイダーの詳細については、そのドキュメントを参照してください。

3. ルーティング

パッケージのルートを定義するには、パッケージ サービス プロバイダーのブート メソッドにルーティング ファイルを導入するだけです。ルーティング ファイルでは、Laravel アプリケーションでルートを登録するのと同じように、Route ファサードを使用してルートを登録できます。

/** * Perform post-registration booting of services. * * @return void */public function boot(){    if (! $this->app->routesAreCached()) {        require __DIR__.'/../../routes.php';    }}
ログイン後にコピー

4. リソース

4.1 ビュー

Laravel にパッケージ ビューを登録するには、ビューの場所を Laravel に伝える必要があります。これを実現するには、サービス プロバイダーのloadViewsFrom メソッドを使用します。 loadViewsFrom メソッドは、ビュー テンプレートへのパスとパッケージ名という 2 つのパラメーターを受け取ります。たとえば、パッケージ名が「courier」の場合、サービス プロバイダーのブート メソッドに次のコードを追加します。

/** * Perform post-registration booting of services. * * @return void */public function boot(){    $this->loadViewsFrom(__DIR__.'/path/to/views', 'courier');}
ログイン後にコピー

パッケージ ビューは、同様の package::view 構文を使用して参照されます。したがって、次のようにクーリエパッケージに管理ビューをロードできます:

Route::get('admin', function () {    return view('courier::admin');});
ログイン後にコピー

パッケージビューをオーバーライドします

loadViewsFrom メソッドを使用すると、Laravel は実際にビュー Storage に対して 2 つのビューを登録します。 location: 1 つは resource/views/vendor ディレクトリで、もう 1 つは指定したディレクトリです。したがって、Courier を例に挙げます。パッケージビューをリクエストするとき、Laravel はまず、開発者が resource/views/vendor/courier にカスタマイズされたバージョンのビューを提供しているかどうかを確認します。ビューが存在しない場合、Laravel はユーザーを検索します。その際に指定されたloadViewsFromディレクトリを呼び出します。このメカニズムにより、エンド ユーザーはパッケージ ビューを簡単にカスタマイズ/オーバーライドできます。

ビューの公開

ビューをアプリケーションの resource/views/vendor ディレクトリに公開したい場合は、サービス プロバイダーの公開メソッドを使用できます。このメソッドは、パッケージのビュー パスとそれに対応するパブリッシュ パス配列をパラメータとして受け取ります:

/** * Perform post-registration booting of services. * * @return void */public function boot(){    $this->loadViewsFrom(__DIR__.'/path/to/views', 'courier');    $this->publishes([        __DIR__.'/path/to/views' => base_path('resources/views/vendor/courier'),    ]);}
ログイン後にコピー

これで、パッケージ ユーザーが Laravel のアーティザン コマンド Vendor:publish を実行すると、ビュー パッケージが指定されたパスにコピーされます。

4.2 翻訳

パッケージに翻訳ファイルが含まれている場合、loadTranslationsFrom メソッドを使用して、Laravel に翻訳ファイルをロードする方法を指示できます。たとえば、パッケージの名前が「courier」の場合、次のコードを追加する必要があります。次のコード サービス プロバイダーのブート メソッドへ:

/** * Perform post-registration booting of services. * * @return void */public function boot(){    $this->loadTranslationsFrom(__DIR__.'/path/to/translations', 'courier');}
ログイン後にコピー

パッケージの変換は、package::file.line 形式の構文を使用して参照されます。したがって、次のようにメッセージ ファイルから宅配便パッケージのウェルカム行をロードできます:

echo trans('courier::messages.welcome');
ログイン後にコピー

翻訳ファイルを公開します

パッケージの翻訳をアプリケーションのリソースに公開したい場合/lang/vendor ディレクトリでは、パッケージ パスと対応する公開パス配列パラメーターを受け取るサービス プロバイダーの公開メソッドを使用できます。たとえば、宅配便パッケージの翻訳ファイルを公開するには、次のようにします。

/** * Perform post-registration booting of services. * * @return void */public function boot(){    $this->loadTranslationsFrom(__DIR__.'/path/to/translations', 'courier');    $this->publishes([        __DIR__.'/path/to/translations' => resource_path('lang/vendor/courier'),    ]);}
ログイン後にコピー
このように、パッケージ ユーザーは Artisan コマンド Vendor:publish を実行して、アプリケーションの指定されたディレクトリにパッケージ翻訳ファイルを公開できます。

4.3 構成

通常、パッケージ構成ファイルをアプリケーションのルート ディレクトリの config ディレクトリに公開すると、パッケージ ユーザーがデフォルトの構成オプションを簡単にオーバーライドできるようになります。サービスプロバイダーのブートメソッドでpublishesメソッドを使用する必要があります:

/** * Perform post-registration booting of services. * * @return void */public function boot(){    $this->publishes([        __DIR__.'/path/to/config/courier.php' => config_path('courier.php'),    ]);}
ログイン後にコピー
これで、パッケージユーザーがLaravelのArtisanコマンドvendor:publishを実行すると、ファイルが指定された場所にコピーされます。もちろん、構成が公開されると、他の構成オプションと同じ方法でアクセスできます:

$value = config('courier.option');
ログイン後にコピー
デフォルトのパッケージ構成

独自のパッケージをマージすることも選択できます。これにより、ユーザーはアプリケーション構成ファイルで実際に上書きしたい構成オプションのみを導入できるようになります。 2 つの構成をマージするには、サービス プロバイダーの register メソッドで mergeConfigFrom メソッドを使用します。

/** * Register bindings in the container. * * @return void */public function register(){    $this->mergeConfigFrom(        __DIR__.'/path/to/config/courier.php', 'courier'    );}
ログイン後にコピー

5. フロントエンド リソース

パッケージには JavaScript、CSS が含まれる場合があります。これらのフロントエンド リソースをアプリケーション ルート ディレクトリの下のパブリック ディレクトリに公開するには、サービス プロバイダーの公開メソッドを使用します。この例では、フロントエンド リソース グループ タグ public を追加します。これは、関連するフロントエンド リソース グループを公開するために使用されます:

/** * Perform post-registration booting of services. * * @return void */public function boot(){    $this->publishes([        __DIR__.'/path/to/assets' => public_path('vendor/courier'),    ], 'public');}
ログイン後にコピー

现在,当包用户执行 vendor:publish命令时,前端资源将会被拷贝到指定位置,由于你需要在每次包更新时重写前端资源,可以使用 --force标识:

php artisan vendor:publish --tag=public --force
ログイン後にコピー

如果你想要确保前端资源已经更新到最新版本,可添加该命令到 composer.json文件的 post-update-cmd列表。

6、发布文件组

你可能想要分开发布包前端资源组和资源,例如,你可能想要用户发布包配置的同时不发布包前端资源,可以通过在调用时给它们打上“标签”来实现分离。下面我们在包服务提供者的 boot方法中定义两个公共组:

/** * Perform post-registration booting of services. * * @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');}
ログイン後にコピー

现在用户可以在使用Artisan命令 vendor:publish时通过引用标签名来分开发布这两个组:

php artisan vendor:publish --provider="Vendor\Providers\PackageServiceProvider" --tag="config"
ログイン後にコピー
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート