Codeigniter 框架开启PDO查询方式、多库连接实现、多语言网站开发配置、以及捕获页面最后报错

本文介绍了如何在CodeIgniter3.0中启用PDO查询方式,实现数据库多库连接,以及如何配置多语言支持并通过register_shutdown_function和error_get_last函数捕获页面错误。

一、Codeigniter 框架开启PDO查询方式及实现多库连接

    CI接触时间不久,也不知道CI是从什么时候开始支持PDO连接的,在网上查了几条资料,2014年发的贴子还有人在说CI里好像不支持PDO连接,估计也有可能,CI后期版本基本处于无更新状态,直到不久前更新了3.0版本,现在外面的开源产品很多还不支持PDO。

    但现在新开发程序估计没有几个人还喜欢用N年前的老连接方式吧,CI前面的版本不知道,但3.0版本是支持PDO连接的。数据库的配置文件在application/config/database.php文件中,如下截图:

    CI默认使用的是mysqli连接方式,一目了然配置文件中罗列了数据库的各项连接必要参数,如果我们按下图进行配置(我本机使用mysql,所以把dbdriver改成mysql。),截图如下:

在控制器中打印出$this->db时就会看到连接所使用的连接方式,截图如下:

    而这个类是system/database/drivers/mysql/mysql_driver.php的实例,而其使用的是mysql_pconnect,并非PDO方式。使用pdo方式也非常简单,将dbdriver里的mysql改成pdo即可。改成之后再打印出$this->db则会显示: 

    这里采用的就是pdo的连接了。另外可以注意一下CI数据库配置中DB数组变量:$db['default'],这里采用数组的形式是为了在使用时可以定义多个数据库,然后连接时传入数组索引值,这样就可以实现多库连接了。

    默认的数据库连接使用的就是$active_group变量设置的值,在控制器中加载数据库时使用$this->load->database('数据库配置索引值');即可取得对应数据库的连接。

附: CodeIgniter PHP程序开发框架 用户手册 chm版本 2.1.3.rar

publish:April 17, 2015 -Friday

二、CI框架3.0(Codeigniter)多语言网站的开发配置

publish:May 4, 2015 -Monday

    语言包实现是一个很简单的事情,将页面中需要使用不同语言展示的元素都放到一起,然后一种语言一个文件,展示时根据数组索引读取对应语言包里的设置值。不用框架实现起来也不复杂。

    如果网站内容量较大,需要用语言展示的较多的话,这时就需要将语言文件分开了,一般的结构就是每个语言包里放一个全局使用的语言文件(基本每个页面都会使用、或者大多数页面要使用的,比如网站顶部和底部要展示的内容)。其它不同的页面可根据控制器的名称来自动调用对应的语言包。

    在CI里语言包默认统一放在appliacation/language/下,每个文件名就是一个语言包,结构就和上面讲的一样,你可以配置一个global_lang.php文件,然后每个控制器写一个controller_name_lang.php,注意了,语言包文件的命名都是以_lang.php为结尾的。

    语言包的结构可参考CI框架里system/language下框架语言包文件,另外在application/config/config.php 配置文件中有一行:

$config['language']	= 'english';

    默认语言配置,可更改网站的默认语言。语言调用也很简单:

$this->lang->load(array('filename1', 'filename2')); #语言调用,一次调用多个语言包
$this->lang->load('filename', 'language');#调用一个指定语言的语言包
$this->lang->line('language_key');#提取语言包文件中数组的值,language_key为对应的索引。
$this->lang->line('misc_key', FALSE); #如果不确定KEY是否存在,可在第二个参数中传入false参数。告诉框架是否记录找不到key的错误信息

    提取语言值:line方法如果取到值就返回,取不到则返回false;在CI控制器里调用语言包时,如果要分控制器调用,可以在控制器的__construct()方法里加入对本控制器语言包的调用。

public function __construct(){
    parent::construct();
    $this->lang->load($this->router->class, 'language');
}

    这样每个控制器初始化时就可以自动加载本控制器的语言包文件。如果一个语言包在全局中都要加载,比如上面的global_lang.php,可以在CI的自动加载中添加上,就可以在程序里省掉这一步了。找到application/config/autoload.php

/*
| -------------------------------------------------------------------
|  Auto-load Language files
| -------------------------------------------------------------------
| Prototype:
|
*/
$autoload['language'] = array('lang1', 'lang2');

    lang1和lang2只需要填写global。不需要带上后面的_lang.php字符串。

 三、CodeIgniter框架通过register_shutdown_function和error_get_last函数捕获页面最后报错

    CodeIgniter (CI)框架core核心文件夹中的:CodeIgniter.php里有几句代码来进行自定义异常控制,如下图:

CI框架通过register_shutdown_function和error_get_last函数捕获页面最后报错

    其中:register_shutdown_function函数注册了一个_shutdown_handler回调方法,register_shutdown_function的作用是设置当页面执行完毕或者执行exit页面时执行的回调方法,CI中的异常输出时最后总会调用一个 exit 方法,而这样即会同时引起_shutdown_handler方法执行,在 common.php 中是这样定义_shutdown_handler的方法的:

function _shutdown_handler()
{
	$last_error = error_get_last();
	if (isset($last_error) &&
		($last_error['type'] & (E_ERROR | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING)))
	{
		_error_handler($last_error['type'], $last_error['message'], $last_error['file'], $last_error['line']);
	}
}

    通过error_get_last获取页面最后停止时的错误状态,如果发生错误并且在报错状态设置中则会调用_error_handler显示错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青岛IT音悦人.林戈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值