Yii框架应用组件用法实例分析


Posted in PHP onMay 15, 2020

本文实例讲述了Yii框架应用组件用法。分享给大家供大家参考,具体如下:

应用组件 ¶

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

在同一个应用中,每个应用组件都有一个独一无二的 ID 用来区分其他应用组件, 你可以通过如下表达式访问应用组件。

\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框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP+AJAX实现无刷新注册(带用户名实时检测)
Dec 02 PHP
js下函数般调用正则的方法附代码
Jun 22 PHP
PHP判断文件是否存在、是否可读、目录是否存在的代码
Oct 03 PHP
file_get_contents获取不到网页内容的解决方法
Mar 07 PHP
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
Jul 05 PHP
PHP Session 变量的使用方法详解与实例代码
Sep 11 PHP
php5.2 Json不能正确处理中文、GB编码的解决方法
Mar 28 PHP
PHPAnalysis中文分词类详解
Jun 13 PHP
跟我学Laravel之请求与输入
Oct 15 PHP
thinkphp模板用法和内容输出实例
Nov 28 PHP
PHP 错误处理机制
Jul 06 PHP
[原创]PHP实现逐行删除文件右侧空格的方法
Dec 25 PHP
Yii框架小部件(Widgets)用法实例详解
May 15 #PHP
Yii框架安装简明教程
May 15 #PHP
php字符串函数 str类常见用法示例
May 15 #PHP
PHP数组array类常见操作示例
May 15 #PHP
php数值计算num类简单操作示例
May 15 #PHP
Thinkphp 框架配置操作之动态配置、扩展配置及批量配置实例分析
May 15 #PHP
Thinkphp 框架配置操作之配置加载与读取配置实例分析
May 15 #PHP
You might like
PHP 5.0 Pear安装方法
2006/12/06 PHP
PHP爆绝对路径方法收集整理
2012/09/17 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
2017/11/20 PHP
详解PHP的抽象类和抽象方法以及接口总结
2019/03/15 PHP
PHP随机数函数rand()与mt_rand()的讲解
2019/03/25 PHP
广告显示判断
2006/08/31 Javascript
jquery 框架使用教程 AJAX篇
2009/10/11 Javascript
统计出现最多的字符次数的js代码
2010/12/03 Javascript
getElementByIdx_x js自定义getElementById函数
2012/01/24 Javascript
基于Jquery实现的一个图片滚动切换
2012/06/21 Javascript
JQuery页面图片切换和新闻列表滚动效果的具体实现
2013/09/26 Javascript
JS中的数组的sort方法使用示例
2014/01/22 Javascript
在JS数组特定索引处指定位置插入元素
2014/07/27 Javascript
JS简单操作select和dropdownlist实例
2014/11/26 Javascript
javascript实现检验的各种规则
2015/07/31 Javascript
浅谈jQuery 选择器和dom操作
2016/06/07 Javascript
浅谈Cookie的生命周期问题
2016/08/02 Javascript
搭建Bootstrap离线文档的方法
2016/12/02 Javascript
Javascript 实现计算器时间功能详解及实例(二)
2017/01/08 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(一)
2017/01/21 Javascript
tracking.js页面人脸识别插件使用方法
2020/04/16 Javascript
python虚拟环境 virtualenv的简单使用
2020/01/21 Javascript
[03:21]辉夜杯主赛事 12月25日TOP5
2015/12/26 DOTA
深入理解Python中各种方法的运作原理
2015/06/15 Python
python中使用序列的方法
2015/08/03 Python
redis之django-redis的简单缓存使用
2018/06/07 Python
pip命令无法使用的解决方法
2018/06/12 Python
Django集成CAS单点登录的方法示例
2019/06/10 Python
python生成随机红包的实例写法
2019/09/02 Python
获取CSDN文章内容并转换为markdown文本的python
2020/09/06 Python
Python 测试框架unittest和pytest的优劣
2020/09/26 Python
css3教程之倾斜页面
2014/01/27 HTML / CSS
全球速卖通俄罗斯站:AliExpress俄罗斯
2019/06/17 全球购物
澳大利亚排名第一的露营和户外设备在线零售商:Outbax
2020/05/06 全球购物
面料业务员岗位职责
2013/12/26 职场文书
实习推荐信格式模板
2015/03/27 职场文书