首页 > 代码库 > ci框架(一)

ci框架(一)

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             入口文件

访问形式                                                                                     

在\application\controllers\welcome.php中添加函数:

public function hello()    {        echo "test";   }

image

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";        }    }?>

image

注意:

  • 方法名以下划线开头的是不能访问成功的,只能间接访问。
  • 只能访问public修饰的方法。
  • 尽量不要与类名相同的方法,会当作构造函数。

加载视图                                                                                    

application\views\view_test.php或者application\views\view\test.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");}

效果:

image

image

分配变量                                                                                     

把数据从控制器中传到视图中,控制器:

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>

效果:

image

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>

显示效果:

image

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 />";        }

效果:

image

加载数据库                                                                                 

这个操作在MVC中是放到model中做的。

在\application\config\database.php中配置数据库参数,注意dbprefixswap_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();

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