Laravel4、自分のアプリの準備を整える

タグ: Laravel4  

Laravel4で本格的に開発を開始するとなると、いろいろな設定が必要となります。まあ、Laravelに限ったことではありませんね。

例えば、使用するライブラリーのセットアップコードとか、Laravel自身の機能の準備とかです。

以下に紹介するのは、セットアップコードを書くために最適な場所です。紹介順は、実行される順番でもあります。

global.php

まず最初に使用を検討するべきなのはapp/start/global.phpです。

startディレクトリーはその名の通りスタートアップのためのコードが記述されています。

その中でもglobal.phpはLaravelの動作環境によらず、いつでも実行されるセットアップファイルです。

環境名.php

globalがどの環境の場合も実行されるのに対し、app/start下の、Laravelが動作する環境名のファイルは、実行環境と同じ名前の場合のみ実行されます。

例えば、デフォルトの動作環境は"production"です。ですから、存在していればproduction.phpが動作します。

開発環境であれば、"local"です。local.phpに書きましょう。PHPUnit実行時は"testing"ですから、testing.phpになります。

"local"の指定はbootstrap/start.phpで行います。自分の好きな環境名を追加することも可能です。

サービスプロバイダー

サービスプロバイダーは「サービス提供者」という意味です。一般的にも使用され、IT関連業者がサービス提供会社のことをカッコつけて表現する場合によく使用されます。検索するとサービスはクラスとインターフェイスの集まりで、プロバイダーはその実装という、なにか中間を省略したざっくりとした定義ばかりにぶち当たります。これはJAVAから来ているようですね。

厳密な定義はどうであれ、定義には多少のブレを含んでいるものです。私の大きな理解では、サービスが「機能」を表すクラスやそのインスタンスのことで、サービス・プロバイダーはその実働クラスです。特にLaravelの場合は、サービスの準備を行うクラスとしてメインに使用されるようです。実際Laravelのサービスプロバイダーが持っているメソッドはbootとregisterの2つです。開発者によるとコンセプトはSymfonyからいただいたようでした。

registerメソッドは、それが含まれるクラスが登録された時に、実行されるセットアップコードを記述する場所です。

bootはルートが呼び出される直前に実行されるセットアップコードを書く場所です。当然、各サービスプロバイダーのregisterメソッドより、実行は後になります。ですから、他のサービスを使用したい場合は、bootに記述する必要があります。

まずは、サービスプロバイダーのクラスを定義しましょう。以下は私が実際に使用しているコードです。

<?php

namespace Laradoc;

use Illuminate\Support\ServiceProvider;

class LaradocServiceProvider extends ServiceProvider
{

    public function register()
    {
        // IoCコンテナへ登録
        \App::bindIf( 'UserController', 'Laradoc\\Controllers\\UserController' );
        \App::bindIf( 'UserRepo', 'Laradoc\\Repositories\\UserRepo' );
        \App::bindIf( 'UserValidator', 'Laradoc\\Services\\Validators\\UserValidator' );
        \App::bindIf( 'LoginValidator', 'Laradoc\\Services\\Validators\\LoginValidator' );
        \App::bindIf( 'LoginAuth', 'Laradoc\\Services\\Authorizations\\LoginAuth' );

        // ビューコンポーサー
        \View::composer( 'layout', 'Laradoc\\ViewComposers\\LayoutComposer' );
    }
}

今回Laradocというシステムを作成しています。そのプロジェクト名でSPR-0規格に則り、名前空間を使用し、クラスローディングを登録しています。

サービスプロバイダーの命名規則は、提供するサービス名+ServiceProviderになります。とはいえこれは、コアクラスのようにサービスを他のモジュールなどに提供するときの話で、自前のWebアプリのように他の機能を使うばかりで提供はしない場合、厳密に適用する必要は無いでしょう。

クラスはIlluminate\Support\ServiceProviderを拡張します。そして通常はregisterメソッドにセットアップコードを記述するだけです。

クラスを作成したら、app/config/app.phpに登録します。こちらは省略します。なにせ、ひと目で分かるでしょうから。他のコアクラスの登録がされているので、最後に付け加えればOKです。