深入理解CI框架:数据库的加载过程
说明:没特别指明的情况下,本文涉及的Codeigniter均为3.1.2版。
要在 CI 框架里使用数据库,你可以显示地加载它:
1 | $this->load->database(db_to_load); |
也可以在加载 model 的时候顺带加载数据库:
说明:没特别指明的情况下,本文涉及的Codeigniter均为3.1.2版。
要在 CI 框架里使用数据库,你可以显示地加载它:
1 | $this->load->database(db_to_load); |
也可以在加载 model 的时候顺带加载数据库:
说明:没特别指明的情况下,本文涉及的Codeigniter均为3.1.2版。
本篇文章所展示的代码就是:浓(阉)缩(割)后的codeigniter框架,目的就是让大家看明白ci框架的构成和运行始末。有些地方和CI不一样,比如我这里用了controller基类来加载model和view,实际上CI是通过CI_Loader来做的,希望我这样做不会对你们理解CI框架造成影响。
###准备工作:
1、apache rewrite
1
2
3
4
5 >RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]2、目录结构(强烈建议把下面的文件放到域名根目录下 = ̄ω ̄= ,这关系到index.php的路径解析):
今天遇到一个从(shao)未(jian)遇(duo)到(guai)过的正则替换:
1 | 'iixxxixx'.replace(/i+/g, '($&)') // complete match |
虽然注释说明白了这是complete match的意思,但我还是不懂啊(以前只遇到过$
加数字),还是搬砖找资料吧 (  ̄ー ̄)
送给你们一本讲解正则表达式的书,不谢!《Regular Expressions: The Complete Tutorial》
翻到replacematch这一页:
说明:没特别指明的情况下,本文涉及的Codeigniter均为3.1.2版。
##一、核心
###index.php:入口文件
入口文件主要定义路径和环境,包括BASEPATH
、FCPATH
、APPPATH
等常量表示的路径和application
、system
等变量表示的路径;
index.php
通过$_SERVER['CI_ENV']
来分辨当前的执行环境,目前支持development
、testing
、production
三种(默认development
),如果你在apache
里配置CI_ENV
为其他值(比如mytest),项目会输出错误信息并停止执行;
###core/CodeIgniter.php:分派请求CodeIgniter.php
加载了各种各样的类和方法,它解析用户的请求(URI类
),判断请求对应哪个控制器的哪个方法(Router类
),创建控制器对象,执行方法,得到结果并输出(Output类
),期间还会加载并执行预先设置好的各种钩子(Hooks类
)。
消息队列(MessageQueue):
简化业务流程
异步处理消息
减少组件耦合
消减数据峰值
场景1:
支付成功以后,给用户发送优惠券or红包;
场景2:
用户注册成功后发送通知邮件or短信;
场景3:
活动里面的站内信发送;
……
总结起来就是,把单个业务简洁化,通过消息系统把不相关的业务连接起来,实现更复杂的业务链,降低整个系统的复杂度。
安装
省略。。。
使用
四个重要概念:虚拟主机(vhost)、交换器(exchange)、队列(queue)、绑定(binding)
先说交换器和队列,附带消息的说明:
dd->p:粘贴到光标的下一行
nyy-p:粘贴到光标的下一行
ndd->p:粘贴到光标的下一行
v模式->y->p:在光标处粘贴,被粘贴内容插入在光标所在的位置
i模式->鼠标右键粘贴:在光标处粘贴,被粘贴内容插入在光标所在的位置
才疏学浅,第一次发现echo可以用逗号
echo ‘x’ . 1 + 5; //输出 6
echo ‘x’ , 1 + 5; //输出 x6
暂时理解为逗号是将 echo 当方法用
问题如题所示,运营觉得这个bug很严重必须改,作为好员工我去看了ueditor的源码。
注:ueditor版本是【UEditor1.4.3】
首先问题可以细分为两个:
1、从上传图片到把图片存到数组,这个过程中图片的顺序有没有改变;
2、把保存的图片显示出来,这个过程中图片的顺序有没有改变;
先看第一个问题,单步调试,发现关键代码如下(在image.js中):
1 | _this.imageList.push(json); |
上面保存图片的方式不会改变图片的顺序,问题一无影响的可能性很高;
$temp_mes_data = array (
‘state’ => ‘on’,
‘temp_mess_id’ => ‘2IWKf1L7pbfFcqCBfzIB-P9coclpprUwwY2PkEPot1g’,
‘temp_content’ =>
array (
‘first’ =>
array (
‘value’ => ‘您刚刚收到了一笔{pay_fee}元的新订单’,
),
‘keyword1’ =>
array (
‘value’ => ‘{unique_id}’,
),
‘keyword2’ =>
array (
‘value’ => ‘{info}’,
),
‘keyword3’ =>
array (
‘value’ => ‘{member}’,
),
‘keyword4’ =>
array (
‘value’ => ‘{mobile}’,
),
‘keyword5’ =>
array (
‘value’ => ‘{address}’,
),
‘remark’ =>
array (
‘value’ => ‘点击这里查看订单详情’,
),
),
‘url’ => ‘http://shop.ci123.com/yiqigou/store_entity/orderDetail/{trade_id}?store_id={store_id}',
);
$data = array (
‘store_id’ => ‘302’,
‘trade_id’ => ‘203245’,
‘pay_fee’ => ‘0.01’,
‘unique_id’ => ‘1609301545079469’,
‘info’ => ‘
贝拉小蜜蜂 5-12岁儿童牙膏防蛀健齿牙牙疼宝宝牙膏 x1’,
‘member’ => ‘
‘mobile’ => ‘’,
‘address’ => ‘’,
);
$temp_mes_data = json_encode($temp_mes_data);
foreach ($data as $k => $v) {
$temp_mes_data = str_replace(“{$k}”, $v, $temp_mes_data);
}
$temp_mes_data = json_decode($temp_mes_data);
var_dump($temp_mes_data);
在此输入正文