ci目录结构
|-----system 框架程序目录 |-----core 框架的核心程序 |-----CodeIgniter.php 引导性文件 |-----Common.php 加载基类库的公共函数 |-----Controller.php 基控制器类文件:CI_Controller |-----Model.php 基模型类文件:CI_Model |-----Config.php 配置类文件:CI_Config |-----Input.php 输入类文件:CI_Input |-----Output.php 输出类文件:CI_Output |-----URL.php URL类文件:CI_URl |-----Router.php 路由类文件:CI_Router |-----Loader.php 加载类文件:CI_Loader |-----helpers 辅助函数 |-----url_helper.php url相关的辅助函数,如:创建url的辅助函数 |-----captcha_helper.php创建图形验证码的辅助函数 |-----libraries 通用类库 |-----Pagination.php 通用分页类库 |-----Upload.php 通用文件上传类库 |-----Image_lib.php 通用图像处理类库 |-----Session.php 通用session类库 |-----language 语言包 |-----database 数据库操作相关的程序 |-----DB_active_rec.php 快捷操作类文件(ActiveRecord) |-----fonts 字库 |-----application 项目目录 |-----core 项目的核心程序 |-----helpers 项目的辅助函数 |-----libraries 通用类库 |-----language 语言包 |-----config 项目相关的配置 |-----config.php 项目相关的配置文件 |-----database.php 数据库相关的配置文件 |-----autoload.php 设置自动加载类库的配置文件 |-----constants.php 常量配置文件 |-----routes.php 路由配置文件 |-----controllers 控制器目录 |-----welcome.php 控制器文件,继承CI_Controller |-----models 模型目录 |-----welcome_model.php 模型文件,继承CI_Model |-----views 视图目录 |-----welcome.php 视图模板文件,默认后缀名为.php |-----cache 存放数据或模板的缓存文件 |-----errors 错误提示模板 |-----hooks 钩子,在不修改系统核心文件的基础上扩展系统功能 |-----third_party 第三方库 |-----logs 日志 |-----index.php 入口文件
访问形式
在applicationcontrollerswelcome.php中添加函数:
public function hello() { echo "test"; }
CI的访问url使用的是pathinfo,入口文件.php/控制器/动作
自己新建控制器,hello.php:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Hello extends CI_Controller { public function sayHello($name) { echo $name,",Hello World"; } } ?>
注意:
- 方法名以下划线开头的是不能访问成功的,只能间接访问。
- 只能访问public修饰的方法。
- 尽量不要与类名相同的方法,会当作构造函数。
加载视图
applicationviewsview_test.php或者applicationviewsview est.php(这中做法主要是方便同一类型的视图可以放在同一个文件夹下方便管理)
<html> <head> </head> <body> test_ci_hello_world </body> </html>
控制器:
public function addView() { $this->load->view("view_test"); }
或者:
public function addView2() { $this->load->view("view/test"); }
效果:
分配变量
把数据从控制器中传到视图中,控制器:
public function addView() { $this->load->vars("title","value"); $list = array( array('id'=>1,'name'=>'jack','email'=>'123@123.com'), array('id'=>2,'name'=>'jack2','email'=>'1233@123.com'), array('id'=>3,'name'=>'jack3','email'=>'12333@123.com') ); $data['new_title']="标题"; $data['list']=$list; $this->load->vars($data); $this->load->view("view_test"); }
视图:
<html> <head> </head> <body> <h1><?php echo $title;?></h1> <h1><?php echo $new_title;?></h1> test_ci_hello_world <table> <?php foreach($list as $item):?> <tr> <td><?=$item['id']?></td> <td><?=$item['name']?></td> <td><?=$item['email']?></td> </tr> <?php endforeach;?> </table> </body> </html>
效果:
load网站进去,控制器:
public function addView() { $this->load->vars("title","value"); $list = array( array('id'=>1,'name'=>'jack','email'=>'123@123.com'), array('id'=>2,'name'=>'jack2','email'=>'1233@123.com'), array('id'=>3,'name'=>'jack3','email'=>'12333@123.com') ); $data['new_title']="标题"; $data['list']=$list; $this->load->vars($data); $this->load->view("view_test"); $this->load->view("footer"); }
视图view_test:
<html> <head> </head> <body> <h1><?php echo $title;?></h1> <h1><?php echo $new_title;?></h1> test_ci_hello_world <table> <?php foreach($list as $item):?> <tr> <td><?=$item['id']?></td> <td><?=$item['name']?></td> <td><?=$item['email']?></td> </tr> <?php endforeach;?> </table>
视图footer:
CI_hello_world!!! </body> </html>
显示效果:
uri参数获取
控制器:
public function getUri($id,$name,$year) { echo "id--->".$id."---name--->".$name."---year--->".$year."<br />"; echo "segment(1)--->".$this->uri->segment(1)."<br />"; echo "segment(2)--->".$this->uri->segment(2)."<br />"; echo "segment(3)--->".$this->uri->segment(3)."<br />"; echo "segment(4)--->".$this->uri->segment(4)."<br />"; echo "segment(5)--->".$this->uri->segment(5)."<br />"; }
效果:
加载数据库
这个操作在MVC中是放到model中做的。
在applicationconfigdatabase.php中配置数据库参数,注意dbprefix和swap_pre这两个参数。在php中写的是前缀,会默认当作swap_pre,然后放到数据库中的时候会转成dbprefix,但是最好两个都弄成一样的。
还有$active_group,默认是default,如果要连接两个数据库,把default另外取名,然后在函数中写明参数就OK。
必须继承数据核心类CI_Model,同时重载父类中的构造方法。
class Model_name extends CI_Model { function __construct() { parent::__construct(); } }
在每次使用数据库的时候,都需要加载一次数据库:
$this->load->database();
为了方便,可以将数据库的加载设置成自动加载,在applicationconfigautoload.php中。
$autoload['libraries'] = array('database');
对于数据库访问对象,装载到超级对象的属性中 $this->db
$res = $this->db->query($sql);//返回对象 $res->result();//返回数组,数组中是一个一个的对象 $res->result_array();//返回二维数组,里面是关联数组 $res->row();//返回第一条数据,直接是一个对象
AR操作数据库
在database.php文件中,将$active_recoed的值改为TRUE,这样就可以使用AR了。
//查询 public function index() { $res = $this->db->get('表名');//这里自动调用前缀 foreach($res->result() as $item) { echo $item->name."<br />"; } }
//插入 public function index() { $data=array( 'name'=>'lisi', 'password'=>md5('lisi') ); $bool = $this->db->insert("表名",$data); var_dump($bool); }
//更新 public function index() { $data=array( 'name'=>'wangwu', 'password'=>md5('wangwu') ); $bool = $this->db->update('表名',$data,array('id'=>3)); var_dump($bool); }
//删除 $bool = $this->db->delete('表名',array('id'=>2)); var_dump($bool);