Codelgniter框架总结(一)
2015-11-07 19:34
716 查看
CI框架总结
最近在学PHP,用CI框架写了一个个人博客,由于刚开始学很多地方没考虑好,就想总结一下CI框架和PHP知识点,我的博客代码对CI框架大体的认识
想从我们理解一个框架的过程来写一下首先CI框架基于MVC,我们一般访问地址的形式: ci/index.php/blog/get_user
先来分析一下访问地址,ci是项目名称,index.php访问的是项目根目录下的index.php文件,后面的内容可以看成路径映射,可以认为是框架知道了我们要访问/blog/get_user,它会帮我们处理,现在我们就不是按资源路径来访问了而是框架帮我们,CI框架会把blog当做控制器,也就是C层,它默认是放在application/controllers里的,现在application/controllers文件夹下应该有一个Blog.php,首字母要大写
<?php class Blog extends CI_Controller{ public function get_user(){ ... } } ?>
Blog类要继承CI_Controller类,现在通过上面的URL就可以访问get_user方法,现在有个问题我们要传一个值应该如何做,可以直接访问ci/index.php/blog/get_user/1
<?php class Blog extends CI_Controller{ public function get_user($id){ ... } }
$id就被赋值为1,我们要在application/config/routes.php文件下加上自己的路由
$route['blog/get_user/(:any)'] = 'blog/get_user/$1';
在这里配置一下可以更合理的安排路由,还可以限定一些字符
$route['blog/get_user/(:num)'] = 'blog/get_user/$1'; //限定数字 $route['pages/(:any)/(:any)'] = 'pages/view/$1/$2'; $route['products/([a-z]+)/(\d+)'] = '$1/id_$2'; $route['products']['put'] = 'product/insert'; $route['products/(:num)']['DELETE'] = 'product/delete/$1'; //可以指定发送的格式 $route['default_controller'] = 'welcome'; //默认的参数 $route['404_override'] = ''; //访问不存在的页面
路由可以自由配置,下面我们来介绍一下V层,文件放在文件夹application/views
我们可以通过$this -> load -> view(视图名, 参数数组);来访问。写一个例子
<?php class Blog extends CI_Controller{ public function get_user($id){ $data['id'] = $id; $this->load->view('index',$data); } }
现在我们要再application/views下有个index.php文件
<?php echo $id?>
访问ci/index.php/blog/get_user/1就可以在页面上看到我们输入的id
总结一下V层可以用到的一些方法
遍历
<html> <head> <title><?php echo $title;?></title> </head> <body> <h3>My Todo List</h3> <ul> <?php foreach ($todo_list as $item):?> <li><?php echo $item;?></li> //遍历 <?php endforeach;?> </ul> </body> </html>
在view中可以调用函数方法和自己写的方法,比较方便,但要先引入文件
<?php include_once('time.php') ?>
现在再说M层,CI框架中我们把我们的文件放在model文件夹中,但我们文件的名字要由规范,建议是”名称_model”,不是强制要求,是因为我们在C层文件里要引入model文件,如果名字不清楚很可能出错,下面完成一个添加用户的功能
先配置数据库信息,在application/config下database.php文件中配置
$db['default'] = array( 'dsn' => '', 'hostname' => 'localhost:3306', 'username' => 'root', 'password' => 'root', 'database' => 'myFream', 'dbdriver' => 'mysqli', 'dbprefix' => '', 'pconnect' => FALSE, 'db_debug' => (ENVIRONMENT !== 'production'), 'cache_on' => FALSE, 'cachedir' => '', 'char_set' => 'utf8', 'dbcollat' => 'utf8_general_ci', 'swap_pre' => '', 'encrypt' => FALSE, 'compress' => FALSE, 'stricton' => FALSE, 'failover' => array(), 'save_queries' => TRUE );
然后我们就可以写M层代码
class User_model extends CI_Model { // 类名首字母大写,继承CI_Model类 function __construct() { parent::__construct(); // 继承父类的构造函数 $this -> load -> database(); // 连接数据库 } public function insert(){ $data = array( 'name' => $this->input->post("name"), //获取post中name 'password' => $this->input->post("password") //获取post中password ); $this->db->insert('user', $data); //添加user表 return $this->db->insert_id(); //返回加入的信息的id } }
大部分的解释都写在代码注释中了,function __construct()方法是构造方法,在类被初始化后会被首先访问,现在我们想知道的是我们要如何调用insert
<?php class Blog extends CI_Controller{ public function __construct() { parent::__construct(); $this->load->model('user_model'); } public function insert_user(){ $this->user_model->insert(); $this->load->view('index',$data); } }
现在我们只需要在view中添加我们注册用户的页面
<html> <head> <title><?php echo $title;?></title> </head> <body> <form action="insert" class="form-horizontal" method="post" role="form"> <div class="form-group"> <label for="firstname" class="col-sm-2 control-label">用户名</label> <div class="col-sm-10"> <input type="text" style="width: 50%;" name="name" class="form-control" id="firstname" placeholder="请输入名字"> </div> </div> <div class="form-group"> <label for="lastname" class="col-sm-2 control-label">密码</label> <div class="col-sm-10"> <input type="password" style="width: 50%;" name="password" class="form-control" id="lastname" placeholder="请输入密码"> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <button type="submit" class="btn btn-default">登录</button> </div> </div> </form> </body> </html>
上面我用了一些ui框架,直接复制了我博客的代码,我们填写表单提交后我们的信息就被插入到数据库了,下面写一些数据库常用的方法
添加 public function insert($arr) { $this -> db -> insert('user', $arr); } 更新 public function update($id, $arr) { $this -> db -> where('uid', $id); //查找到此id的用户信息 $this -> db -> update('user', $arr);//更新 } 查找 public function select($name) { $this -> db -> where('uname', $name); $this -> db -> select('*'); //选取全部信息 $query = $this -> db -> get('user'); return $query -> result(); //返回值 } 查找所有数据 public function get_blogs($id){ if ($id === NULL) { $query = $this->db->get('blogs'); return $query->result_array(); } $query = $this->db->get_where('blogs', array('id' => $id)); return $query->row_array(); } 删除 function delete($id) { $this -> db -> where('id', $id);//查找到此id的用户信息 $this -> db -> delete('user');//删除此id所有信息 }
感觉CI框架orm写的还是比较方便的,同时还可以直接写自己的sql语句
$query = $this->db->query('SELECT name, title, email FROM my_table'); foreach ($query->result() as $row) { echo $row->title; echo $row->name; echo $row->email; } echo 'Total Results: ' . $query->num_rows(); $sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?"; $this->db->query($sql, array(3, 'live', 'Rick')); $sql = "SELECT * FROM some_table WHERE id IN ? AND status = ? AND author = ?"; $this->db->query($sql, array(array(3, 6), 'live', 'Rick'));
其他的关于数据库的信息给出一个比较好的网站,还推荐大家去看一下官方网站
相关文章推荐
- 一个关于if else容易迷惑的问题
- 分享微信开发Html5轻游戏中的几个坑
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- Php Installing An Expansion
- 新注册
- 插件管理框架 for Delphi(一)
- 四大漏洞入侵博客
- PHP+Apache在Windows 9x下的安装和配置
- IIS 6 的 PHP 最佳配置方法
- 安装Apache和PHP的一些补充
- Linux Apache+MySQL+PHP
- 建立Apache+PHP+MySQL数据库驱动的动态网站
- PHP 5.3.0 安装分析心得
- apache 环境下 php 的配置注意事项