Yii2 framework backup
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

9.0 KiB

アプリケーションコンポーネント

アプリケーションは サービスロケータ です。 アプリケーションは、リクエストを処理するためのいろいろなサービスを提供する一連のオブジェクト、いわゆる アプリケーションコンポーネント をホストします。 例えば、urlManager がウェブリクエストを適切なコントローラにルーティングする役割を負い、db コンポーネントが DB 関連のサービスを提供する、等々です。

全てのアプリケーションコンポーネントは、それぞれ、同一のアプリケーション内で他のアプリケーションコンポーネントから区別できるように、ユニークな ID を持ちます。 アプリケーションコンポーネントには、次の式によってアクセス出来ます。

\Yii::$app->componentID

例えば、\Yii::$app->db を使って、アプリケーションに登録された yii\db\Connection を取得することが出来ます。 また、\Yii::$app->cache を使って、yii\caching\Cache を取得できます。

アプリケーションコンポーネントは、上記の式を使ってアクセスされた最初の時に作成されます。 二度目以降のアクセスでは、同じコンポーネントインスタンスが返されます。

どのようなオブジェクトでも、アプリケーションコンポーネントとすることが可能です。 アプリケーションの構成情報 の中で yii\base\Application::components プロパティを構成することによって、アプリケーションコンポーネントを登録することが出来ます。 例えば、

[
    'components' => [
        // クラス名を使って "cache" コンポーネントを登録
        'cache' => 'yii\caching\ApcCache',

        // 構成情報の配列を使って "db" コンポーネントを登録
        'db' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=localhost;dbname=demo',
            'username' => 'root',
            'password' => '',
        ],

        // 無名関数を使って "search" コンポーネントを登録
        'search' => function () {
            return new app\components\SolrService;
        },
    ],
]

Info: 必要なだけ多くのアプリケーションコンポーネントを登録することが出来ますが、慎重にしなければなりません。 アプリケーションコンポーネントはグローバル変数のようなものです。 あまり多くのアプリケーションコンポーネントを使うと、コードのテストと保守が困難になるおそれがあります。 多くの場合、必要なときにローカルなコンポーネントを作成して使用するだけで十分です。

コンポーネントをブートストラップに含める

上述のように、アプリケーションコンポーネントは最初にアクセスされた時に初めてインスタンスが作成されます。 リクエストの間に全くアクセスされなかった時は、インスタンスは作成されません。 けれども、場合によっては、明示的にアクセスされないときでも、リクエストごとにアプリケーションコンポーネントのインスタンスを作成したいことがあります。 そうするために、アプリケーションの yii\base\Application::bootstrap プロパティのリストにそのコンポーネントの ID を挙げることが出来ます。

また、特別なコンポーネントをブートストラップするためにクロージャを用いることも出来ます。 インスタンス化されたコンポーネントを返すことは要求されません。 単に yii\base\Application のインスタンス化の後にコードを走らせるだけのためにクロージャを使うことも出来ます。

例えば、次のアプリケーション構成情報は、log コンポーネントが常にロードされることを保証するものです。

[
    'bootstrap' => [
        'log',
        function($app){
            return new ComponentX();
        },
        function($app){
            // 何らかのコード
           return;
        }
    ],
    'components' => [
        'log' => [
            // "log" コンポーネントの構成情報
        ],
    ],
]

コアアプリケーションコンポーネント

Yii は固定の ID とデフォルトの構成情報を持つ一連の コア アプリケーションコンポーネントを定義しています。 例えば、yii\web\Application::request コンポーネントは、ユーザリクエストに関する情報を収集して、それを ルート として解決するために使用されます。 また、yii\base\Application::db コンポーネントは、それを通じてデータベースクエリを実行できるデータベース接続を表現します。 Yii のアプリケーションがユーザリクエストを処理出来るのは、まさにこれらのコアアプリケーションコンポーネントの助けがあってこそです。

下記が事前に定義されたコアアプリケーションコンポーネントです。 通常のアプリケーションコンポーネントに対するのと同様に、これらを構成し、カスタマイズすることが出来ます。 コアアプリケーションコンポーネントを構成するときは、クラスを指定しない場合は、デフォルトのクラスが使用されます。