1、访问方式:

CodeIgniter 的访问URL使用的是pathinfo,入口文件/控制器/方法(/参数列表)

eg:localhost/index.php/welcome/index/id

第一段表示调用控制器类。
第二段表示调用类中的函数或方法。
第三及更多的段表示的是传递给控制器的参数,如 ID 或其它各种变量。 

2、URI参数获取:

控制器端代码

 public function getUri($id,$name,$year)
{
echo "id--->".$id."---name--->".$name."---year--->".$year."<br />"; //依次得到uri参数
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 />";
}

运行效果

3、分配变量

(1)把数据从控制器传到视图中

控制器端代码

 public function addView()
{
$this->load->vars("title","value");
$list = array(
array('id'=>1,'name'=>'mw','email'=>'123@123.com'),
array('id'=>2,'name'=>'mw2','email'=>'1233@123.com'),
array('id'=>3,'name'=>'mw3','email'=>'12333@123.com')
);
$data['new_title']="test_title";
$data['list']=$list;
$this->load->vars($data);

$this->load->view("view_test");
}
$this->load->vars('$array');
说明:这个函数以一个关联数组作为输入参数,将这个数组用PHP的extract函数,转化成与这个数组对应的变量 。你之所以要单独用这个函数也许是因为,你想在控制器的构造函数中设置一些全局变量,以使这些变量在任意函数调用的视图(view)里能够用上。你能多次调用这个函数。数组数据被缓存并被并入一个数组,用来转化成变量。

视图端代码

 <html>
<head>
</head>
<body>
<h1><?php echo $title;?></h1>
title is <?php echo $title;?> <h1><?php echo $new_title;?></h1>
new_title is <?php echo $new_title;?> <h1>test_ci:the data from controller to view</h1>
<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>

运行效果


 (2)数据分配流程范例:

控制器端helloworld.php代码

 <?php
class HelloWorld extends CI_Controller{
function index($name){  //获取url中的参数$name
echo $name,", Hello world ~ in controller and the name is parameter";
echo '</br>';
$this->load->model('helloworld_model');  //载入模型
$data=array();
$data['helloworld_view'] = $this->helloworld_model->get_helloworld_view();  //利用模型中的方法返回其中的数据
$this->load->view('helloworld_view',$data);  //载入视图,并传入参数$data
}
}
在控制器有设置名为$data的数组,并把一些对象的属性及文本读入数组;然后通过名称装载视图,并把$data作为第二个参数。
注:在幕后,CI很好地利用了另外一个PHP函数:extract(),这个函数的作用是把数组中的元素取出放入变量表,其中每个键值对中的键名即为变量名,对应该键名的值为变量的值。因此我们刚才定义的$data数组在视图中转换成一个单一的变量。

 虽然你只传送一个变量到视图中,但是,你能把许多数据装进那个变量中。$data数组的每个值还可以是数组,这被称为多维数组,因此,用一个数组变量可以把大量的变量传递给视图,这是一个很好的编程技巧。

模型端helloworld_model.php代码

 <?php
class Helloworld_model extends CI_Model{
public function get_helloworld_view()
{
$helloworld_view = "Model for Helloworld!";
return $helloworld_view;  //返回数据$helloworld_view
}
}

视图端helloworld_view.php代码

 <html>
<head>
<title> Helloworld </title>
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
</head>
<body>
View for Helloworld ~ in the view //视图本身显示信息
<h1>
<?php echo $helloworld_view;?>  //显示从模型中得到的数据
</h1>
the workflow is : controller get the data from model, and send view display.
</body>
</html>

访问url:http://localhost/index.php/helloworld/index/name

运行效果

4、加载数据库:

此类操作放在MVC中的Model中,必须继承数据核心类CI_Model,同时重载父类的构造方法。

 class Model_name extends CI_Model
{
function __construct()
{
parent::__construct();
}
}

在每次使用数据库的时候,都需要加载一次数据库:

 $this->load->database();

为了方便,可以将数据库的加载设置成自动加载,在\application\config\autoload.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);

总结为:

(1)连接数据库:$this->load->database();
   注:将其写在模型的构造函数里,这样就在加载模型的同时连接了数据库
(2)插入数据: $this->database->insert($t_name,$data);
$t_name:需操作的表
$data:需插入的数据(键名=字段名,键值=字段值,自增主键可不写)
(3)更新数据: $this->db->where(字段名,字段值);
$this->db->update(表名,修改值的数组);
(4)查询数据: $this->db->where(字段名,字段值);
$this->db->select(字段);
$query=$this->db->get(表名);
return $query->result();
(5)删除数据: $this->db->where(字段名,字段值);
$this->db->delete(表名);

最新文章

  1. 还是俄罗斯方块之android版
  2. FacadePattern(门面模式)
  3. 解决PKIX:unable to find valid certification path to requested target 的问题
  4. 全新的membership框架Asp.net Identity(2)——绕不过的Claims
  5. sublime2的快捷键
  6. IOS 登陆判断问题
  7. IntelliJ IDEA 目录技巧
  8. jsf2.0 tomcat 修改页面后无法立马看到页面修改效果
  9. 套题整理 Orz DXY
  10. HDU 4770 Lights Against Dudely
  11. jquery的checkbox问题
  12. MD5加密帮助类
  13. Django中文无法转换成latin-1编码的解决方案
  14. DM6437 C64X+ EDMA 疑惑总结记录
  15. [置顶] Jsp中的table多表头导出excel文件
  16. SELECT中的多表连接
  17. linux新学篇
  18. ZH奶酪:Ubuntu 14.04安装LAMP(Linux,Apache,MySQL,PHP)
  19. CentOS 6.5 x64下查看服务版本
  20. mysql批量update的两种方法

热门文章

  1. CocoSourcesCS 4
  2. ubuntu14.10环境下使用apache2.2配置代理服务器
  3. 【Python】help与dir的用法
  4. 【Java】Java_10 常量与变量
  5. 严重: Exception sending context initialized event to listener instance of class org.springframework.we
  6. java之super关键字
  7. unity, inspector debug
  8. 【Android】 给我一个Path,还你一个酷炫动画
  9. Atitit.嵌入式web 服务器 java android最佳实践
  10. Java synchronized详解(java 线程同步)