4 个关注者

应用程序组件

应用程序是 服务定位器。它们承载着一组称为应用程序组件的对象,这些对象提供不同的服务来处理请求。例如,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 组件用于收集有关用户请求的信息并将其解析为一个 routedb 组件表示一个数据库连接,您可以通过它执行数据库查询。正是借助这些核心应用程序组件,Yii 应用程序才能处理用户请求。

以下是预定义的核心应用程序组件列表。您可以像配置普通应用程序组件一样配置和自定义它们。当您配置一个核心应用程序组件时,如果您没有指定其类,则将使用默认类。

  • assetManager:管理资产包和资产发布。有关更多详细信息,请参阅 资产 部分。
  • db:表示一个数据库连接,您可以通过它执行数据库查询。请注意,当您配置此组件时,您必须指定组件类以及其他必需的组件属性,例如 yii\db\Connection::$dsn。有关更多详细信息,请参阅 数据库访问对象 部分。
  • errorHandler:处理 PHP 错误和异常。有关更多详细信息,请参阅 处理错误 部分。
  • formatter:在向最终用户显示数据时格式化数据。例如,数字可能会以千位分隔符显示,日期可能会以长格式格式化。有关更多详细信息,请参阅 数据格式化 部分。
  • i18n:支持消息翻译和格式化。有关更多详细信息,请参阅 国际化 部分。
  • log:管理日志目标。有关更多详细信息,请参阅 日志记录 部分。
  • yii\swiftmailer\Mailer:支持邮件撰写和发送。有关更多详细信息,请参阅 邮件发送 部分。
  • response:表示发送给最终用户的响应。有关更多详细信息,请参阅 响应 部分。
  • request:表示从最终用户接收到的请求。有关更多详细信息,请参阅 请求 部分。
  • session:表示会话信息。此组件仅在 Web 应用程序 中可用。有关更多详细信息,请参阅 会话和 Cookie 部分。
  • urlManager:支持 URL 解析和创建。有关更多详细信息,请参阅 路由和 URL 创建 部分。
  • user:表示用户身份验证信息。此组件仅在 Web 应用程序 中可用。有关更多详细信息,请参阅 身份验证 部分。
  • view:支持视图渲染。有关更多详细信息,请参阅 视图 部分。

发现错别字或您认为此页面需要改进?
在 github 上编辑它 !