アプリケーション プリンシパルはサービス ロケーターであり、リクエストを処理するためのさまざまな機能を提供する一連のアプリケーション コンポーネントをデプロイします。 たとえば、urlManager コンポーネントは Web ページ要求を処理して対応するコントローラーにルーティングする役割を果たし、db コンポーネントはデータベース関連のサービスなどを提供します。
同じアプリケーション内では、各アプリケーション コンポーネントには他のアプリケーション コンポーネントを区別するための一意の ID があり、次の式を使用してアプリケーション コンポーネントにアクセスできます。 (推奨学習: yii チュートリアル)
\Yii::$app->componentID
たとえば、\Yii::$app->db を使用して、アプリケーションに登録されている DB 接続を取得できます。\Yii を使用します。 : $app->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; }, ], ]
情報: アプリケーション コンポーネントの登録が多すぎる場合は注意してください。アプリケーション コンポーネントはグローバル変数のようなものです。あまり多く使用すると、テストやメンテナンスが困難になる可能性があります。 通常、ローカル コンポーネントは必要に応じて作成できます。
ブート起動コンポーネント
前述したように、アプリケーション コンポーネントは最初にアクセスされたときにのみインスタンス化されます。リクエストの場合、インスタンス化されません。アクセスされない場合でも、すべてのリクエスト処理中にコンポーネントをインスタンス化したい場合は、アプリケーション本体のブートストラップ属性にコンポーネント ID を追加できます。
クロージャを使用してカスタム コンポーネントを起動することもできます。インスタンス化されたコンポーネントを直接返す必要はありません。クロージャは、アプリケーション本体 yii\base\Application がインスタンス化された後にも呼び出されます。
たとえば、次のアプリケーション本体の構成では、ログ コンポーネントが常に読み込まれることが保証されます。
[ 'bootstrap' => [ 'log', function($app){ return new ComponentX(); }, function($app){ // 可以写自定义的代码 return; } ], 'components' => [ 'log' => [ // "log" 组件的配置 ], ], ]
コア アプリケーション コンポーネント
Yii は、固定 ID とデフォルト構成を持つ一連のコア コンポーネントを定義します。たとえば、リクエスト コンポーネントは、ユーザー リクエストの収集と解析に使用されます。ルート; db は、データベース操作を実行できるデータベース接続を表します。これらのコンポーネントを通じて、Yii アプリケーション本体はユーザーのリクエストを処理できます。
以下は、事前定義されたコア アプリケーション コンポーネントのリストであり、通常のアプリケーション コンポーネントと同様に構成およびカスタマイズできます。コアコンポーネントを設定し、そのクラス名を指定しない場合、デフォルトで Yii によって指定されたクラスが使用されます。
以上がyii アプリケーションコンポーネントとは何を意味しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。