CodeIgniter PHP框架学习之二

视图(view)
一个视图就是一个网页,或是网页的部分,如头部,底部,侧边栏等等。
视图从不直接调用,必须被一个控制器来调用。
1、视图文件保存位置:application/views/
2、视图文件的文件名:以.php作扩展名
3、在控制器类中载入视图:$this->load->view(‘name’); //其中的 name 便是你的视图文件的名字(如果视图文件存于子目录中,则还应包含子目录名,如:子目录1/试图文件名)。注意:.php 文件的扩展名(后缀名)没有必要专门写出,除非你使用了其他的扩展名。
4、向视图文件中传递数据:数据通过控制器以一个数组或是对象的形式传入视图 , 这个数组或对象作为视图载入函数的第二个参数(例如:$this->load->view(‘name’,array(‘title’=& amp; gt;’标题’,’content’=>’内容’)); )。当我们一次性载入多个视图的时候,只需在第一个视图传入数据就可以了。
5、获取视图的内容:将$this->load->view()函数的第三个参数设为“true”,比如:
$string = $this->load->view(‘myfile’, ”, true);
view方法中的第三个参数表示不输出视图,而只是将结果返回给一个变量。
模型(Model)
模型类的声明方式同控制器类。不同的只是
1、模型类文件保存位置:application/models/
2、模型类的父类名为:Model
3、调用方式不同:㈠控制器类是通过URL调用;㈡模型类是通过在控制器类中使用:
$this->load->model(‘Model_name’);
引用,引用的时候,第一个参数为模型类名(可能还含有子目录名);第二个参数为引用后赋予的新对象名;可以将第三个参数设置为TRUE(或包含数据库连接配置的数组)来使模型装载函数自动连接数据库。
辅助函数(helpers)
1、辅助函数文件保存位置:system/helpers 或 system/application/helpers
2、辅助函数文件名:yourname_helper.php(如果是你扩展的,就要加前缀“MY_”,或你自定义的前缀(application/config/config.php :$config[‘subclass_prefix’] = ‘MY_’;))
3、载入单个辅助函数文件:$this->load->helper(‘辅助函数文件名’);//辅助函数文件名不包括“_helper.php”部分
4、载入多个辅助函数文件:$this->load->helper( array(‘辅助函数文件名1’, ‘辅助函数文件名2’, ‘辅助函数文件名3’) );
5、自动载入辅助函数文件:可以通过打开 application/config/autoload.php ,并往自动载入数组(autoload array)中增加辅助函数文件名来实现。
插件(plugins)
插件的工作方式几乎和辅助函数一模一样。它们最主要的区别在于插件文件一般只有一个函数,而辅助函数文件里面通常是一系列函数。辅助函数被看作系统核心的一部分,而插件通常是网友制作和分享的。
1、插件文件保存位置:system/plugins 或 system/application/plugins
2、插件文件的文件名:yourname_pi.php
3、载入单个插件:$this->load->plugin(‘插件名’);//插件名不包括“_pi.php”部分
4、载入多个插件:$this->load->plugin( array(‘插件名1’, ‘插件名2’, ‘插件名3’) );
5、自动载入插件:可以通过打开 application/config/autoload.php ,并往自动载入数组(autoload array)中增加插件来实现
类库(libraries)
1、类库文件保存位置:system/libraries(系统类库) 或 system/application/libraries(自定义类库)
2、自定义类库命名约定:类名和类文件名应保持一致,它们的首字母必须大写(如是扩展系统类库的类,要加前缀“MY_”,前缀可设置 application/config/config.php:$config[‘subclass_prefix’],注意:所有原始 CodeIgniter类库以 CI_ 作为前缀,所以请勿以CI_作为你自己的前缀.)
3、类文件的格式
㈠完全自定义的类:

㈡扩展系统类库的类:
class MY_Email extends CI_Email {
function My_Email()
{//如果你需要在类中使用构造函数,你必须在构造函数中显式继承母类构造函数:
parent::CI_Email();
}
}
当你在自定义类中想使用CodeIgniter原始类时,你可以这样做:
首先,定义CodeIgniter对象赋给一个变量:
$CI =& get_instance();//必须以引用的方式
一旦定义某个对象为一个变量,你就可以使用那个变量名取代$this:
$CI =& get_instance();
$CI->load->helper(‘url’);
$CI->load->library(‘session’);
$CI->config->item(‘base_url’);
etc.
注意: 如果你使用php 4,那么请最好不要在类的构造函数中调用 get_instance() .php4在引用位于构造函数中的CI super object时存在问题,因为对象只有在类完全实例化后才存在.
4、载入类库:$this->load->library(‘类文件名(也是类名)’,’构造函数的参数数组’);//类文件名不用加 上”.php”扩展名(如是扩展系统类库的类,也不要加application/config /config.php:$config[‘subclass_prefix’]所定义的前缀),名字不分大小写;构造函数的参数数组只有在构造函数存在 且需要传入参数的时候才设置。
5、使用类库对象:$this->小写的类名->类中的方法(); // 对象的实例名永远都是小写的
钩子(hooks)-扩展框架的核心
1、启用钩子:application/config/config.php =》$config[‘enable_hooks’] = TRUE;
2、定义钩子:application/config/hooks.php =》
㈠定义单个钩子:
$hook[‘pre_controller’] = array(
‘class’ => ‘MyClass’, //你希望调用的类名.如果你更喜欢使用过程函数代替类的话,此项留空.
‘function’ => ‘Myfunction’, //你希望调用的函数名.
‘filename’ => ‘Myclass.php’, //包含有你的类/函数的文件名.
‘filepath’ => ‘hooks’, //包含你的脚本的目录名(相对于application文件夹).
‘params’ => array(‘beer’, ‘wine’, ‘snacks’) //你希望传递给脚本的任何参数. 此项是可选的.
);
㈡定义多个钩子:
$hook[‘pre_controller’][] = array(
‘class’ => ‘MyClass’,
‘function’ => ‘Myfunction’,
‘filename’ => ‘Myclass.php’,
‘filepath’ => ‘hooks’,
‘params’ => array(‘beer’, ‘wine’, ‘snacks’)
);
$hook[‘pre_controller’][] = array(
‘class’ => ‘MyOtherClass’,
‘function’ => ‘MyOtherfunction’,
‘filename’ => ‘Myotherclass.php’,
‘filepath’ => ‘hooks’,
‘params’ => array(‘red’, ‘yellow’, ‘blue’)
);
3、挂勾点:
pre_system:
系统执行的早期调用.仅仅在benchmark 和 hooks 类 加载完毕的时候. 没有执行路由或者其它的过程.
pre_controller:
在调用你的任何控制器之前调用.此时所用的基础类,路由选择和安全性检查都已完成.
post_controller_constructor:
在你的控制器实例化之后,任何方法调用之前调用.
post_controller:
在你的控制器完全运行之后调用.
display_override:
覆盖_display()函数, 用来在系统执行末尾向web浏览器发送最终页面.这允许你用自己的方法来显示.注意,你需要通过 $this->CI =& get_instance() 引用 CI 超级对象,然后这样的最终数据可以通过调用 $this->CI->output->get_output() 来获得。
cache_override:
可以让你调用自己的函数来取代output类中的_display_cache() 函数.这可以让你使用自己的缓存显示方法
scaffolding_override:
可以让scaffolding(脚手架)的请求去触发你自己的脚本替代.
post_system:
在最终着色页面发送到浏览器之后,浏览器接收完最终数据的系统执行末尾调用。
自动加载资源
CodeIgniter有一个自动加载属性,它允许在系统运行过程中初始的自动加载库(libraries),帮助函数(helpers),插件(plugins)。
要自动加载资源,先打开 application/config/autoload.php 文件,然后增加你想要自动加载的项目在 autoload 数组中(不包括文件扩展名“.php”)。
公共函数
bool is_php(‘版本号’)
如果已安装的PHP版本号等于或高于你所提供的版本号,本函数将返回布尔值 TRUE,否则返回 FALSE。
bool is_really_writable(‘path/to/file’)
指定文件是否可写。在Windows平台,is_writable()函数在实际没有文件写权限时也返回真。
mix config_item(‘item_key’)
取得单个配置信息
show_error(‘消息'[,int $status_code = 500 ])
这个函数将会使用以下错误模版来显示错误消息:
application/errors/error_general.php
show_404(‘页面’)
这个函数将会使用以下错误模版来显示 404 错误信息:
application/errors/error_404.php
log_message(‘级别’, ‘消息’)
这个函数可以让你将消息写入记录文件中。你必须在第一个参数中选择三个“级别“中的任何一个, 指明它是哪一类消息(调试debug, 错误 error, 信息info)。 第二个参数是消息本身。
注意: 确保”logs” 文件夹是可写的,才能准确地将消息写入记录文件中。另外,你必须要设置记录的“threshold“来进行记录。例如通过设置“threshold“,你 可以只记录错误类型的消息,而不用记录其他两种。如果你将“threshold“设为0,记录就会被禁止。
set_status_header(code, ‘text’);
设置服务器状态头(header)。例如:set_status_header(401);// 将header设置为: Unauthorized
脚手架(Scaffolding)
CodeIgniter 的脚手架功能使您可以在开发过程中方便快速的在数据库中添加、删除、修改数据。
非常重要: 脚手架(Scaffolding)只可以在开发过程中使用。因为它提供了非常少的安全保护,所以可以访问到您的 CodeIgniter 站点的任何人都可以添加删除或修改您数据库中的数据。如果您使用脚手架,那么请确认您在使用完之后一定要立刻禁止它。千万不要在上线的站点中激活它,并且 一定要在使用前给它设置一个密匙(secret word)。
1、设置一个密匙(Secret Word):application/config/routes.php =》$route[‘scaffolding_trigger’]把值替换成你的密匙(密匙不能 以下划线开头)。
2、激活脚手架:在你的控制器构造函数中添加这样的代码:$this->load->scaffolding(‘数据表名’);
比如:
class Blog extends Controller {
function Blog()
{
parent::Controller();
$this->load->scaffolding(‘table_name’);//激活脚手架
}
}
3、使用脚手架:example.com/index.php/控制器类/脚手架密钥/
脚手架特性只能操作有主键的表,因为这是各种数据库函数所必需的信息。
网页缓存
当一个网页第一次被加载的时候,缓存文件将被保存到system/cache文件夹。下次访问的时候,系统就会直接读取缓存文件,然后返回给用户的浏览器。如果缓存文件过期,它将被删除并重新生成。注意:Benchmark 标签在使用了缓存的页面仍然可用。
1、启动缓存:将代码$this->output->cache(n);放在你的控制器类的函数中(代码中的n是你希望缓存更新的分钟数)。
2、清除缓存:将上面的代码从你的控制器类中删除即可。相应缓存会自动过期并被删除。

Leave a Reply