php框架学习CI(CodeIgniter)的经验分享

来源:互联网 发布:excel数据有效性的来源 编辑:程序博客网 时间:2024/04/28 12:00

首先我们必须知道CodeIgniter是什么?

CodeIgniter是一个应用程序框架,是一个为用PHP编写网络应用程序提供的工具包

CodeIgniter使用严格的M-V-C模型,这样可以更好地使表现层和逻辑层分离。


CodeIgniter生成干净的URL 

CodeIgniter URL 在默认情况下,CodeIgniter中的URL被设计成对搜索引擎和人类友好,不同于使用标准“查询字符串”方法的是,CodeIgniter使用基于段的方法:

example.com/news/article/my_article

 

example.com/class/function/ID

第一段表示的控制器类

第二段表示调用类中的函数或者方法

第三以及更多的字段表示的是传递给控制器的参数,如ID或者其他各种变量。

 

删除index.php文件

默认情况下,index.php 文件将被包含在你的URL种:

example.com/index.php/class/function/ID

可以通过.htaccess文件来设置一些简单的规则来删除它,使用“negative”方法将非指定内容进行重定向:

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

 

什么是控制器

简而言之,一个控制器就是一个类文件,是以一种能够和URL关联在一起的方式来命名的。

example.com/index.php/blog/

这个例子中CodeIgniter加载是一个名为blog.php 的控制器。

<?php

         Class Blog extends CI_Controller{

         Function__construct(){

         Parent::__construct();

}

Function index(){

         Echo“Hello world”;

}

}

?>

把以上代码写到blog.php中,放入application/controllers/文件夹下,现在使用类似这样的URL访问你的站点

Example.com/index.php/blog/ 你就会看到Helloworld

注意:类名首字母必须大写

上例中用到的方法名是index()。如果URL的第二部分为空的话,会默认载入”index”方法,也可以将地址写成这样来访问。

 

定义默认控制器

当你的网站没有设置URI或者直接从更目录访问的时候,Codeigniter会加载默认的控制器,打开application/config/routes.php 文件来设置默认控制器

$router[‘default_controller’]=’Blog’;

 

 

视图

首先创建一个视图,在application/views/文件夹下建立一个blogview.php的文件。

<html>

<head>

<title>My Blog</title>

</head>

<body>

<h1>Welcome to my blog</h1>

</body>

</html>

 

然后是加载视图

blog.php控制器中的方法中用一下方法进行加载视图

$this->load->view(‘blogview’);

可以加载多个视图,并且可以传递一些动态数据

例如一下代码,在blog.php控制器中

function show() {

           $data['title']="My Real Title";

           $data['heading']="My Real Heading";

           $this->load->view('blogview',$data);

       }

view中就可以这样去使用

<html>

<head>

<title><?php echo$title;?></title>

</head>

<body>

<h1><?php echo$heading?></h1>

</body>

</html>

循环输出数据大代码:

<ul>

<?php foreach($todo_list as $item):?>

<li><?php echo$item;?></li>

<?php endforeach;?>

</ul>

 

什么是模型?

模型是专门用来和数据库打交道的php类,例如,假设想做一个Blog,你可以写一个模型类,里面包含插入、更新、删除blog数据的方法。

下面写一个简单的例子

 

在数据库中建立一个表,表名位user

 

字段

备注

Id

编号,主键自动增长

Username

姓名 varchar

Phone

电话 varchar

 

models中建立一个名字为user.php的模型类。下面是具体代码

<?php

         Class User extends CI_Model{

                   Function__construct(){

                            Parent::__construct();

}

}

?>

注意model类必须继承超级modelCI_Model

 

下面是数据库的配置:在application/config/database.php下修改代码如下

$db['default']['hostname'] = 'localhost';

$db['default']['username'] = 'root';

$db['default']['password'] = '******';

$db['default']['database'] = 'dbname';

$db['default']['dbdriver'] = 'mysql';

$db['default']['dbprefix'] = '';

$db['default']['pconnect'] = TRUE;

$db['default']['db_debug'] = TRUE;

 

在控制器中加载这个配置以及model类,在controllers下定义控制器类user.php

<?php

         ClassUser extends CI_Controller{

         Function __construct(){

                   Parent::__construct();

}

Function add(){

         $this->load->database();//加载数据库配置

         $this->load->model(‘user’);//加载模型类,其实就是再制定要对哪个表进行操作

         $data = array(‘username’=>’zhangsan’,’phone’=>’123456789’);

         $this->db->insert(‘user’,$data);//快速插入数据的操作

}

}

?>

辅助函数是帮助我们完成特定任务的函数,每个辅助函数文件仅仅是一些函数的集合。CodeIgniter默认没有载入辅助函数文件。所以如果想使用辅助函数,就必须先载入它,一旦载入,辅助函数将全局可用,可以在controllerviews中使用它们,辅助函数文件,一般保存在system/helpers或者application/helpers文件夹中,CodeIgniter将会先在application/helpers下寻找对应的辅助函数文件,如果该目录不存在或者目录下没有对应的辅助函数文件,CI才会载入system/helpers下的辅助函数文件。

 

载入辅助函数,$this->load->helper(‘name’);例如要载入文件名为url_helper.php,载入形式如下

$this->load->helper(‘url’);

一次可以载入多个辅助函数,参数要用数组形式

$this->load->helper(array(‘helper1’,’helper2’,……));

 

使用CodeIgniter类库

所有的类库文件存放在system/libraries文件夹。大多数情况下你需要预先在controller中初始化后才能使用它们。

$this->load->library(‘class_name’);

加载类库时,一次也可以加载多个类库。

注意:程序员还可以自定义自己的类库

 

使用CodeIgniter适配器,适配器是一种特殊的库,它有一个父类和任意数量的子类,子类可以访问其父类元素,但不能访问其兄弟类的元素,在你的控制器中,适配器为类库提供了一种优雅的语法,一次类库会就此获益甚至会需要分解成离散的类。

适配器的源文件放在system/library目录下。

 

基准测试类

CodeIgniter有一个总是有效的基准测试类,能够用来计算两个标记点的时间差。

测试基准类可以在控制器,视图或者模型中使用,用法如下:

标记一个开始点

标记一个结束点

运行elapsed_time函数显示结果

$this->benchmark->mark('code_start');
// Some code happens here
$this->benchmark->mark('code_end');
echo $this->benchmark->elapsed_time('code_start', 'code_end');

0 0