应用程序是 服务定位器。它们承载着一组称为应用程序组件的对象,这些对象提供不同的服务来处理请求。例如,urlManager
组件负责将 Web 请求路由到相应的控制器;db
组件提供与 DB 相关的服务;等等。
每个应用程序组件都有一个 ID,该 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 组件用于收集有关用户请求的信息并将其解析为一个 route;db 组件表示一个数据库连接,您可以通过它执行数据库查询。正是借助这些核心应用程序组件,Yii 应用程序才能处理用户请求。
以下是预定义的核心应用程序组件列表。您可以像配置普通应用程序组件一样配置和自定义它们。当您配置一个核心应用程序组件时,如果您没有指定其类,则将使用默认类。
发现错别字或您认为此页面需要改进?
在 github 上编辑它 !
注册 或 登录 以评论。