yii应用组件是什么意思

发布时间 - 2019-11-06 00:00:00    点击率:

应用主体是服务定位器, 它部署一组提供各种不同功能的应用组件来处理请求。 例如,urlmanager组件负责处理网页请求路由到对应的控制器、db组件提供数据库相关服务等等。

在同一个应用中,每个应用组件都有一个独一无二的 ID 用来区分其他应用组件, 你可以通过如下表达式访问应用组件。    (推荐学习:yii教程)

\Yii::$app->componentID

例如,可以使用 \Yii::$app->db 来获取到已注册到应用的 DB connection, 使用 \Yii::$app->cache 来获取到已注册到应用的 primary 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加入到应用主体的 bootstrap 属性中。

你还可以使用闭包来引导启动自定义的组件。不需要直接返回一个实例化的组件。 在应用主体 yii\base\Application 实例化后,闭包也会被调用。

例如, 如下的应用主体配置保证了 log 组件一直被加载。

[
    'bootstrap' => [
        'log',
        function($app){
            return new ComponentX();
        },
        function($app){
            // 可以写自定义的代码
           return;
        }
    ],
    'components' => [
        'log' => [
            // "log" 组件的配置
        ],
    ],
]

核心应用组件

Yii 定义了一组固定ID和默认配置的 核心 组件, 例如 request 组件 用来收集用户请求并解析 路由; db 代表一个可以执行数据库操作的数据库连接。 通过这些组件,Yii应用主体能处理用户请求。

下面是预定义的核心应用组件列表, 可以和普通应用组件一样配置和自定义它们。 当你配置一个核心组件,不指定它的类名的话就会使用Yii默认指定的类。


# yii  # bootstrap  # 全局变量  # 闭包  # 对象  # 数据库 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  Laravel模型事件有哪些_Laravel Model Event生命周期详解  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  如何用wdcp快速搭建高效网站?  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  如何将凡科建站内容保存为本地文件?  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  如何用狗爹虚拟主机快速搭建网站?  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  如何在云主机上快速搭建网站?  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  智能起名网站制作软件有哪些,制作logo的软件?  如何在宝塔面板中创建新站点?  制作电商网页,电商供应链怎么做?  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  Laravel如何处理CORS跨域请求?(配置示例)  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  JavaScript如何实现继承_有哪些常用方法  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  HTML 中动态设置元素 name 属性的正确语法详解  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  百度浏览器如何管理插件 百度浏览器插件管理方法  个人摄影网站制作流程,摄影爱好者都去什么网站?  bootstrap日历插件datetimepicker使用方法  JavaScript中的标签模板是什么_它如何扩展字符串功能  php结合redis实现高并发下的抢购、秒杀功能的实例  Laravel如何实现数据库事务?(DB Facade示例)  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  Windows Hello人脸识别突然无法使用  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  如何用已有域名快速搭建网站?  音乐网站服务器如何优化API响应速度?  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  如何在橙子建站中快速调整背景颜色?  iOS验证手机号的正则表达式  如何在阿里云购买域名并搭建网站?  Laravel API资源类怎么用_Laravel API Resource数据转换  Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  Linux系统运维自动化项目教程_Ansible批量管理实战  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解