|
今天開始,寫下第一個框架CodeIgniter的學習
首先想說下MVC,其實現在還沒有辦法對MVC進行更多的理解,就我目前理解的而言。MVC分為三個部分,模式,視圖,控制器。控制器控制了一切,用于控制。視圖是顯示出輸入的部分,至于模式,應該就是接收控制器的返回,然后再返回數據給控制器吧
CodeIgniter是周兄推薦的一個簡單的框架,用于對框架的學習,相信,習慣了MVC思考問題的方式以后,很難再能回到之前的思考方式了
CodeIgniter 之控制器
其實說明文檔已經寫的很詳細了,我說下我出錯的地方,和我的理解
頁面 example.com/index.php/blog/cole/
會試圖去尋找application/controllers/ 下面的blog.php 然后執行blog這個類里面的cole這方法
需要注意的是blog.php里面的類 名字必須是blog ,此外,一個頁面只能有一個類,但是可以有多個方法
此外,還需要注意的是如果使用function __construct的時候,繼承的父類的__construct會被重寫那么在此方法里面必須再次調用父類的 construct 這樣 parent::Controller();
其他請查手冊
视图部分
由于之前用过smarty,所以...哈哈,其实和smarty是差不多的,都是先注册变量,然后在另一个页面调用,没有太大的差别
关于视图不得不说的话:请注意,在控制器注册的时候,和smarty不一样的地方,就是只能注册一个数组,明白吗?不能注册变量,如果你要注册一个变量,那么也要用一个数组保存这个变量
举例如下:控制器部分
<?php
class cole extends Controller {
var $name = "my name is cole";
function index(){
$name = $this->name;
$this->load->view('blogview',array('name'=>$name));
}
}
?>
视图部分
<?=$name?>
当然也可以这么用,控制器部分
<?php
class cole extends Controller {
var $name = "my name is cole";
function index(){
$name['cole'] = $this->name;
$this->load->view('blogview',$name);
}
}
?>
视图部分
<?=$cole?>
好的,也许能看出些什么了,我说的更明白点,在视图的部分,直接用键名作为变量名,CodeIgniter已经为你遍历整个数组了
注意:在一个控制器里只能注册一个数组
举例说明 以下的做法是错误的 控制器代码
<?php
class cole extends Controller {
var $name = "my name is cole";
function index(){
$cole['cole']= $this->name;
$data['to']= array('Clean House', 'Call Mom', 'Run Errands');
$this->load->view('blogview',$data);
$this->load->view('blogview',$cole);
}
}
?>
必须用下面的用法
<?php
class cole extends Controller {
var $name = "my name is cole";
function index(){
$data=array();
$data['cole']= $this->name;
$data['to']= array('Clean House', 'Call Mom', 'Run Errands');
$this->load->view('blogview',$data);
}
}
?>
此外
$this->load->view('blogview',$data); 不能同时对一个视图使用多次注册变量
模型
学到这里,心情开始激动了,接下来就是让我们最激动的事情,用框架操作数据库,然后让数据库返回值传到控制器,这样,我们就可以开始真正使用 CodeIgniter 来架构我们的程序了
让我们一起推开这扇大门,一起进入最核心的部分吧!!!^-^
ok!让我们继续吧
首先我们修改下数据库的配置文件 在application/config/datebase.php里
然后我们写一个很简单的控制器代码
<?
class Test extends Controller{
function index(){
$this->load->database();
$query = $this->db->query('select * from shop');
$result['result'] = $query->result('');
//print_r($result);
$this->load->view('cole',$result);
}
}
?>
先要说明的是 发送查询的sql语句是 $this->db->query()而返回结果是$query->result();
请注意红色的部分是$query->result();解释一下 如果这里用$query->result();那么返回的是一个对象 所以在视图里面 所用的方式 应该是$values->name; (name是我数据库里的一个字段)
然后 我比较习惯用之前的方式 所以这里故意让$query->result(");让它不会空 为空就是默认的object方式
那么视图代码是
<?
foreach($result as $values){
print_r($values['name']) ;
}
?>
补充:使用$query->result_array() 可以直接返回数组
这样,我们实现了一个简单的数据库的查询....稍微有点成就感了....
接下來,我們要使用CodeIgniter里面的數據庫類,不能和以前一样,访问数据库的代码都自己写啦!不然框架还有什么意思呢?
出来吧!Active Record 类
个人觉得在这里 需要注意的地方是 比如
控制器
<?
class Test extends Controller{
function index(){
$this->load->database();
//$query = $this->db->query('select * from shop');
//$query = $this->db->get('shop',5,10);
$this->db->select('name');
$this->db->select('id');
$query = $this->db->get('shop');
$result['result'] = $query->result_array();
//print_r($result);
$this->load->view('cole',$result);
}
}
?>
两个$this->db->select(); 这个时候两个都会被执行,并返回到$result['resule']数组里
在视图的部分可以直接读出 id和name
在Active Record 类中,提供了几乎所有的sql语法查询,请参考手册吧
让人困惑的上传类
1 我想一次上传多张图片
2 总要给我取得图片的名字吧,我要传回数据库
3 图片名字可以做修改吗
求解中....难道这个上传类只能拿来看?........
(未完.....) |
|