4 フォロワー

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

アプリケーションはサービスロケーターです。リクエストの処理に様々なサービスを提供する、いわゆるアプリケーションコンポーネントのセットをホストします。例えば、urlManagerコンポーネントはWebリクエストを適切なコントローラーにルーティングする役割を担い、dbコンポーネントはDB関連のサービスを提供します。

各アプリケーションコンポーネントには、同じアプリケーション内の他のアプリケーションコンポーネントの中で一意に識別されるIDがあります。下記の式を使用してアプリケーションコンポーネントにアクセスできます。

\Yii::$app->componentID

例えば、\Yii::$app->dbを使用してDB接続を取得し、\Yii::$app->cacheを使用してアプリケーションに登録されているプライマリキャッシュを取得できます。

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

アプリケーションコンポーネントは任意のオブジェクトにすることができます。アプリケーション設定yii\base\Application::$componentsプロパティを設定することで、それらを登録できます。例えば、

[
    'components' => [
        // register "cache" component using a class name
        'cache' => 'yii\caching\ApcCache',

        // register "db" component using a configuration array
        'db' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=localhost;dbname=demo',
            'username' => 'root',
            'password' => '',
        ],

        // register "search" component using an anonymous function
        'search' => function () {
            return new app\components\SolrService;
        },
    ],
]

情報: 必要なだけ多くのアプリケーションコンポーネントを登録できますが、慎重に行う必要があります。アプリケーションコンポーネントはグローバル変数のようなものです。アプリケーションコンポーネントを多く使用すると、コードのテストと保守が困難になる可能性があります。多くの場合、ローカルコンポーネントを作成して、必要に応じて使用できます。

ブートストラップコンポーネント

前述のように、アプリケーションコンポーネントは初めてアクセスされたときにのみインスタンス化されます。リクエスト中に全くアクセスされない場合は、インスタンス化されません。しかし、明示的にアクセスされなくても、すべてのリクエストでアプリケーションコンポーネントをインスタンス化したい場合があります。そのためには、アプリケーションのbootstrapプロパティにそのIDをリストすることができます。

クロージャを使用してカスタマイズされたコンポーネントをブートストラップすることもできます。インスタンス化されたコンポーネントを返す必要はありません。クロージャは、yii\base\Applicationのインスタンス化後にコードを実行するためにも使用できます。

例えば、次のアプリケーション設定では、logコンポーネントが常にロードされるようになります。

[
    'bootstrap' => [
        'log',
        function($app){
            return new ComponentX();
        },
        function($app){
            // some code
           return;
        }
    ],
    'components' => [
        'log' => [
            // configuration for "log" component
        ],
    ],
]

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

Yiiは、固定IDとデフォルト設定を持つコアアプリケーションコンポーネントのセットを定義しています。例えば、requestコンポーネントは、ユーザーリクエストに関する情報を収集し、ルートに解決するために使用されます。dbコンポーネントは、データベースクエリを実行できるデータベース接続を表します。これらのコアアプリケーションコンポーネントの助けを借りて、Yiiアプリケーションはユーザーリクエストを処理できます。

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

  • assetManager:アセットバンドルとアセットの公開を管理します。アセットセクションで詳細をご覧ください。
  • db:DBクエリを実行できるデータベース接続を表します。このコンポーネントを構成する際には、コンポーネントクラスと、yii\db\Connection::$dsnなどの他の必要なコンポーネントプロパティを指定する必要があります。データベースアクセオブジェクトセクションで詳細をご覧ください。
  • errorHandler:PHPエラーと例外を処理します。エラー処理セクションで詳細をご覧ください。
  • formatter:エンドユーザーに表示されるデータをフォーマットします。たとえば、数値には千の区切り記号が表示され、日付は長形式でフォーマットされる場合があります。データフォーマットセクションで詳細をご覧ください。
  • i18n:メッセージの翻訳とフォーマットをサポートします。国際化セクションで詳細をご覧ください。
  • log:ログターゲットを管理します。ロギングセクションで詳細をご覧ください。
  • yii\swiftmailer\Mailer:メールの作成と送信をサポートします。メール送信セクションで詳細をご覧ください。
  • response:エンドユーザーに送信されるレスポンスを表します。レスポンスセクションで詳細をご覧ください。
  • request:エンドユーザーから受信したリクエストを表します。リクエストセクションで詳細をご覧ください。
  • session:セッション情報を表します。このコンポーネントはWebアプリケーションでのみ使用できます。セッションとクッキーセクションで詳細をご覧ください。
  • urlManager:URLの解析と作成をサポートします。ルーティングとURL作成セクションで詳細をご覧ください。
  • user:ユーザー認証情報を表します。このコンポーネントはWebアプリケーションでのみ使用できます。認証セクションで詳細をご覧ください。
  • view:ビューのレンダリングをサポートします。ビューセクションで詳細をご覧ください。

タイプミスを見つけたり、このページの改善点があれば教えてください。
Githubで編集する !