您的位置:首页 > 编程语言 > PHP开发

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'));


其他的关于数据库的信息给出一个比较好的网站,还推荐大家去看一下官方网站
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php mvc 框架 博客