Laravel 5.dev パッケージ開発

イントロダクション

パッケージは、Laravelに機能を追加する、一番重要な方法です。パッケージとして、何でも動作させることができます。たとえば、日付ライブラリーであるCarbonや、振る舞い駆動開発(BDD)テストフレームワークのBehatなどです。

もちろん、他の種類のパッケージも存在しています。スタンドアローンで動作するパッケージもあります。動作させるのにLaravelに限らず、どんなフレームワークも必要としません。CarbonもBehatもスタンドアローンパッケージの例です。Laravelと一緒に使用するには、composer.jsonファイルでシンプルに使用を指定します。

逆に、Laravelと一緒に使用することを意図したパッケージもあります。こうしたパッケージは、Laravelアプリケーションを高めることを特に意図した、ルート、コントローラー、ビュー、設定を持つことでしょう。このガイドは、Laravelに特化したパッケージの開発を主に説明します。

Laravelのパッケージは、全てPackagistComposerにより配布されます。ですから、これらの素晴らしいPHPパッケージ配布ツールについて学ぶことは、大切です。

ビュー

パッケージの内部構造は完全にみなさん次第です。しかし、通常各パッケージは、一つ以上のサービスプロバイダーを含むでしょう。サービスプロバイダーはIoC結合を含み、同時にパッケージの設定、ビュー、言語ファイルの設置場所も指定します。

ビューファイル

パッケージのビューは通常、二重のコロンによる「名前空間」で指定します。

return view('package::view.name');

Laravelに対し、指定された名前空間のビューはどこに存在するのかを伝える必要があります。例えば、パッケージに"courier"という名前がついているなら、サービスパッケージのbootメソッドに、以下のコードを指定します。

public function boot()
{
    $this->loadViewsFrom(__DIR__.'/path/to/views', 'courier');
}

これで、以下の記法を使用し、パッケージのビューをロードできます。

return view('courier::view.name');

loadViewsFromメソッドを使用する場合、Laravelはビューの2つの場所を実際には登録します。一つは、アプリケーションのresources/views/vendorディレクトリーで、もう一つは皆さんが指定したディレクトリーです。では、courierの例を使って見ましょう。パッケージのビューがリクエストされると、Laravelは最初にresources/views/vendor/courierの中にカスタムバージョンのビューが開発者により用意されていないかチェックします。カスタムビューが用意されていなければ、次にloadViewsFromの呼び出しで指定したパッケージビューディレクトリーを探します。これにより、パッケージのビューがエンドユーザーにより、簡単にカスタマイズ/オーバーライドできるようになっています。

ビューの発行

パッケージのビューをresource/views/vendorディレクトリーへ発行するには、サービスプロバイダーのbootメソッドで、publishesメソッドを使用する必要があります。

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コマンドを実行すると、ビューディレクトリーが指定された場所へコピーされます。

既存のファイルをオーバーライトしたい場合は、--forceスイッチを使用します。

php artisan vendor:publish --force

注目: publishesメソッドにより、どんなタイプのファイルでも、好きな場所へ発行できます。

言語ファイル

パッケージの言語ファイルは、通常二重コロン記法を使用し指定されます。

return trans('package::file.line');

指定された名前空間の言語ファイルがどこに存在するかをLaravelへ伝える必要があります。例えば、パッケージ名が"courier"ならば、サービスプロバイダーのbootメソッドに以下の行を追加する必要があるでしょう。

public function boot()
{
    $this->loadTranslationsFrom(__DIR__.'/path/to/translations', 'courier');
}

言語ファイルのフォルダーは、それぞれの言語のサブディレクトリーにわけられている必要があることに注意してください。例えば、enesruなどです。

これで、以下の記法を使用し、パッケージの言語ファイルをロードできます。

return trans('courier::file.line');

設定

通常、あなたのパッケージの設定ファイルをアプリケーション自身のconfigディレクトリーへ発行する必要があることでしょう。これにより、あなたのデフォルト設定オプションをユーザーに簡単にオーバーライドしてもらえるようになります。

設定ファイルを発行するには、サービスプロバイダーのbootメソッドで、publishesメソッドを使用するだけです。

$this->publishes([
    __DIR__.'/path/to/config/courier.php' => config_path('courier.php'),
]);

これで、あなたのパッケージのユーザーが、Laravelのvendor:publishコマンドを実行すると、ファイルが指定された場所へコピーされます。もちろん、設定ファイルが一度発行されると、他の設定ファイル同様に、アクセスできるようになります。

$value = config('courier.option');

もしくは、あなたのパッケージ設定ファイルをアプリケーションのファイルへマージすることを選ぶこともできます。これにより、設定の発行済ファイルの中で、実際にオーバーライドしたいオプションだけをユーザーに含めてもらう指定方法を取ってもらうことができます。設定ファイルをマージする場合は、サービスプロバイダーのregisterメソッドで、mergeConfigFromメソッドを使います。

$this->mergeConfigFrom(
    __DIR__.'/path/to/config/courier.php', 'courier'
);

ファイルグループの発行

ファイルのグループごとに分割して発行したい場合もあります。例えば、ユーザーにパッケージの設定ファイルとアセットファイルを別々に発行できるようにさせたい場合です。

// 設定ファイルの発行
$this->publishes([
    __DIR__.'/../config/package.php', config_path('package.php')
], 'config');

// マイグレーションの発行
$this->publishes([
    __DIR__.'/../database/migrations/' => base_path('/database/migrations')
], 'migrations');

これでタグを指定してもらえば、分割してファイルを発行できます。

php artisan vendor:publish --provider="Vendor\Providers\PackageServiceProvider" --tag="config"

ルート

パッケージのルートファイルをロードするには、サービスプロバイダーのbootメソッドの中で、シンプルにincludeしてください。

サービスプロバイダーからルート定義ファイルインクルードする

public function boot()
{
    include __DIR__.'/../../routes.php';
}

注意:パッケージでコントローラーを使用している場合、ファイルをロードできるように、composer.jsonで確実に設定してください。

ドキュメント章別ページ

Artisan CLI

ヘッダー項目移動

注目:アイコン:ページ内リンク設置(リンクがないヘッダーへの移動では、リンクがある以前のヘッダーのハッシュをURLへ付加します。

移動

クリックで即時移動します。

バージョン

設定

適用ボタンクリック後に、全項目まとめて適用されます。

カラーテーマ
和文指定 Pagination
和文指定 Scaffold
Largeスクリーン表示幅
インデント
本文フォント
コードフォント
フォント適用確認

フォントの指定フィールドから、フォーカスが外れると、当ブロックの内容に反映されます。EnglishのDisplayもPreviewしてください。

フォント設定時、表示に不具合が出た場合、当サイトのクッキーを削除してください。

バックスラッシュを含むインライン\Code\Blockの例です。

以下はコードブロックの例です。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * ユーザに関連する電話レコードを取得
     */
    public function phone()
    {
        return $this->hasOne('App\Phone');
    }
}

設定を保存する前に、表示が乱れないか必ず確認してください。CSSによるフォントファミリー指定の知識がない場合は、フォントを変更しないほうが良いでしょう。

キーボード・ショートカット

オープン操作

PDC

ページ(章)移動の左オフキャンバスオープン

HA

ヘッダー移動モーダルオープン

MS

移動/設定の右オフキャンバスオープン

ヘッダー移動

T

最初のヘッダーへ移動

E

最後のヘッダーへ移動

NJ

次ヘッダー(H2〜H4)へ移動

BK

前ヘッダー(H2〜H4)へ移動

その他

?

このヘルプページ表示
閉じる