码迷,mamicode.com
首页 > Web开发 > 详细

ci中MVC

时间:2016-04-15 20:12:47      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:

一、ci中MVC

 

二、的访问模式为pathinfo模式,如http://localhost/index.php/控制器/方法

 

application目录

controllers 控制器

models模型

views 视图

 

默认控制器welcome.php,默认方法是index方法,默认加载模版welcome_message.php

 

控制器:

1、文件名全部小写

2、所有控制器需要直接或间接继承CI_Controller

3、方法名称不能以下划线开头

4、私有、受保护的方法(动作),浏览器不能直接访问,要求访问的方法必须是public

5、方法名称不区分大小写

6、index不能作为控制器名称,index是受保护字段

7、与类名相同的,会被php当做构造方法

8、不允许直接访问控制器方法

if ( ! defined(‘BASEPATH‘)) exit(‘No direct script access allowed‘);

加载视图: //视图默认是php文件,如果想用html,可以用视图.html

$this->load->view(‘welcome_message‘);//控制器_视图

$this->load->view(‘welcome/message‘);//控制器/视图

 

一、单独分配一个变量:

$this->load->vars(‘title‘,‘这是标题‘);

 

视图使用变量: echo $title;

 

二、分配数组

 

$this->load->vars($_POST);

 

 

视图里最好用html里加php代码,不要用Php标签中加html

 

四、在控制器方法中加载头和尾部(vars加载视图可以多次加载)

 

$this->load->view(header);//头

$this->load->view(index);//内容

$this->load->view(fooder);//尾部

 

五、推荐使用这种形式写循环

<?php foreache($list as $key):?>

<?=$key[‘id‘]?> // 可以试试,php短标签写法,和<?php echo $a[‘id‘]?>一样

<?php andforeache;?>

 

 

CI的超级对象

      当前的控制器对象

      属性:

$this->load(装载器类的实例,类的加载,加载视图、文件)

      方法:

      view() : $this->load->view(index);加载视图

      vars() : $this->load->vars($_POST);分配数据

      database(): 数据库加载对象

      model(): 装载模型

      helper(): 加载帮助文件

 

$this->uri($this->uri ,不确定自己试试)(是ci_url的实例,文件在system/core/URL.php)

      $_GET方法:

      segment():   获取Url某一段的参数的值

      $this->url->segment(1);获取第一段参数的值

     

      入口文件.php/控制器/方法(动作)/参数1/参数2

      public function index($id-0,$name...){ //$id-0传值的时候按照传值,不传值默认0

           echo $id.$name...;

      }

也可以在动作后面直接写参数,依次写变量接收

$this->input是ci_input的实例,文件在system/core/input.php

      $this->input->post(‘username‘); //取代$_POST

      $this->input->server(‘DOCUMENT_ROOT‘); //取代$_SERVER

      在视图里面也可以通过$this访问超级对象

      例如: <?php echo $this->input->server(‘DOCUMENT_ROOT‘); ?>

 

使用数据库访问//手册->数据库类->查询、生成结果

 

      application/config/database.php  //配置数据库账户、密码、数据库、表前缀

      $db[‘default‘][‘dbprefix‘] = ‘‘;//用户定义表前缀

      $db[‘default‘][‘swap_pre‘] = ‘‘;//系统默认替换用户定义表前缀,最好初试设置和用户自定义一样,写sql语句必须用这个表前缀

      $this->load->database(); //可以在application/config/autload.php里设置$autoload[‘libraries‘] = array(‘database‘);自动加载

 

      //查询数据

      public function index()

      {

           $this->load->database();//加载数据库操作类,装载成功后会放在超级对象的属性中,默认属性名称为db

           //var_dump($this->db);

           $res = $this->db->query($sql); //返回对象

           $res->result(); //返回数组,数组里是一个一个对象,通过箭头调用

           $res->result_array(); //返回二维数组,里面是关联数组

           $res->row();//返回第一条数据,是对象

           $this->load->view(‘index‘,$_POST);//可以用第二个参数传值

      }

      //添加数据,其它的update,delete,也是这样的

 

      public function add()

      {

           $this->load->database();

 

           $res = $this->db->query($sql);//返回真或者假

 

           if($res){

           echo    $this->db->affected_rows();//返回受影响行数

           echo    $this->db->insert_id();//返回自增id的值

 

           }

 

      }

复杂的sql用这个

      参数绑定//参数只能是索引数组

 

      $sql = "select*from bg_user where name=?";

      $this->db->query($sql,$name);//如果有多个问号,需要传入索引数组

 

 

AR模型(简单的sql用这个)

 

      (基础sql语句,Active Record 类)获得都是对象,遍历后用->调用

                 application/config/datebase.php中的$active_record = TRUE;必须为true才可以使用,默认是true

 

      如:

           $query = $this->db->get(‘mytable‘);

 

连贯操作:(查询user表里id,name字段,id大于3的,跳过2条,显示3条,按照id降序)

           $res=$this->db->select(‘id,name‘)

                            ->from(‘user‘)

                            ->where(‘id >=‘,3)//id后边必须有空格

                            ->limit(3,2) //这个顺序和sql语句是反的一定注意

                            ->ordey_by(‘id desc‘)

                            ->get();

                      var_dump($res->result());

 

                 echo $this->db->last_query();//显示最后一条执行的sql语句

 

where方法:

                 $this->where(‘id‘,1)->get();

                 $this->where(‘id =‘,1)->get();//这2种方法都行,id后边一定要有空格

                 $this->where(‘id !=‘,1)->get();//不等于1的,注意id后边的空格

                 $this->where(array(‘id‘=>1)->get();

                 $this->where(array(‘id >‘=>1,‘username‘=>‘zhangsan‘)->get();//数组中可以传多个值,可以写不等、大于、小于等等条件,注意后边的空格

                

                

 

                 echo $this->db->last_query();//显示最后一条执行的sql语句

 

如何扩展控制器

      application/core/里新建扩展控制器;让别的控制器继承这个

    可以在application/core/config.php里修改自定因控制器前缀$config[‘subclass_prefix‘] = ‘MY_‘;默认必须以MY_开头

      <?php

      class MY_Controller extends CI_Controller{

      public function __construct(){

      parent::__construct();//第一行必须调用父类的构造方法

 

      //echo ‘aaaa‘;

      //权限验证

      //登录验证

      }

      }

 

模型 application/models/

    1、文件名称必须全部小写,类名首字母必须大写

    2、起名的时候最好用user_model这样,名称后边加_model,因如和控制器名称相同会报错,避免这种情况发生

    3、都要继承 CI_Model

    4、在模型中可以直接使用超级对象的属性

    在model里

    <?php

      class user_model extends CI_Model{

 

           //返回所有用户

           public function getAll(){

           $res = $this->db->get(‘user‘);

           return $res->result();

 

           }

      }

 

      在控制器里

      class Welcome extends CI_Controller {

 

      public function index()

      {

           //加载模型

           $this->load->model(‘user_model‘,‘user‘);//第二个参数为别名,可以不要

           //使用方法,获取数据

           $list = $this->user_model->getAll();//如果用别名的话,这里这么调用$list = $this->user->getAll();

 

           //加载视图

           $this->load->view(‘home/index‘,array(‘list‘=>$list))

      }

}

      在视图里面循环输出

 

url相关函数 //手册-url辅助函数

      如果使用必须在application/confing/autoload.php里面配置$autoload[‘helper‘] = array(‘url‘);

      或者在对应控制器里添加

      $this->load->helper(‘url‘); 或者

      在视图里

      <?php echo site_url(‘控制器/方法‘);?>

 

      可以在视图里写网址下的地址如

      <?php echo base_url();?>public/css.css

 

路由设置

      在application/confing/routes.php里设置$route[‘default_controller‘] = "welcome";

      另外设置$route[‘正册\.html‘] = ‘空置期/方法/参数‘;//设置这个为Url伪静态

      如果apache可以支持.htaccess,把.htaccess放在入口文件处,隐藏入口文件

      (开启apache的rewrite功能,LoadModule rewrite_module modules/mod_rewrite.so)

 

      下一课程15

 

ci中MVC

标签:

原文地址:http://www.cnblogs.com/520fyl/p/5396407.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!