ci中MVC

一、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

时间: 2024-08-24 15:50:41

ci中MVC的相关文章

CI中的AR操作

1 /** 2 * CI 中的 AR 操作 3 * @author zhaoyingnan 4 **/ 5 public function mAR() 6 { 7 /*************** 查询 *************/ 8 //select * from mp4ba limit 21,10; 9 //$objResult = $this->db->get('mp4ba', 10, 21); 10 //echo $this->db->last_query();die;

PHP实例开发(3)PHP中MVC学习之ThinkPHP

PHP中MVC学习之ThinkPHP 1.什么是MVC MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器.使用MVC的目的是将M和V的实现代码分离 MVC是一个设计模式,它强制性的使应用程序的输入.处理和输出分开.使用MVC应用程序被分成三个核心部件:模型.视图.控制器.它们各自处理自己的任务. 2.为什么要使用 MVC 首先,最重要的一点是多个视图能共享一个模型,现在需要用越来越多的方式来访问你的应用程序.由于模型返回的数据没有进行格式化,所以同样的构件能

个人对JavaWeb中MVC与三层架构的区别理解

JavaWeb中MVC是指B/S结构开发中的一种设计模式,能够将Web页面与业务逻辑以及数据库操作之间的耦合性降到最低点,易于代码的重用以及后期维护.而三层架构的概念在JavaWeb中则是指Web层,业务层,数据层.但三层架构中却是把MVC中的Model,也就是JavaBeans分成业务层和数据层,而把Controller控制器以及View视图合并成Web层.二者之间最大的区别在于MVC只限于JavaWeb,而三层架构则能够实现在非Web应用平台之上,只需替换掉Web层足以,而业务层与数据层依旧

Java中MVC模式

MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器.使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式.比如一批统计数据你可以分别用柱状图.饼图来表示.C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新. 模型-视图-控制器(MVC)是Xerox PARC在八十年代为编程语言Smalltalk-80发明的一种软件设计模式,至今已被广泛使用.最近几年被推荐为Sun公司J2EE平台的设计模式,并且受到越来越多的使用 Cold

CI中控制器名不能和本个 控制器中的方法名相同

控制器名称:application/controllers/tang.php 控制器中方法名称:application/controllers/role.php  中有方法 public  function tang(){ } 这样就会出现错误 CI中控制器名不能和本个 控制器中的方法名相同,布布扣,bubuko.com

Android中MVC模型(复合模式)

mvc是model,view,controller的缩写,mvc包括三个部分: 1.模型(model)对象:是应用程序的主体部分,全部的业务逻辑都应该写在该层. 2.视图(view)对象:是应用程序中负责生成用户界面的部分.也是在整个mvc架构中用户唯一能够看到的一层,接收用户的输入,显示处理结果. 3.控制器(control)对象:是依据用户的输入,控制用户界面数据显示及更新model对象状态的部分,控制器更重要的一种导航功能,想用用户出发的相关事件,交给m处理. android鼓舞弱耦合和组

带你初识Angular中MVC模型

简介 MVC是一种使用 MVC(Model View Controller 模型-视图-控制器)设计模式,该模型的理念也被许多框架所吸纳,比如,后端框架(Struts.Spring MVC等).前端框架(Angular.Backbone等).在学习angular的过程中,我在网上查找关于angular MVC介绍的文章很少,有些文章也没有很直白地为初学者指明angular MVC到底是啥样貌,因此,今天我们就来谈谈MVC模型在angular的形态. 为了介绍angular MVC模型,我建立一个

NEt中MVC的View和Controller的几种传值方式

1: ViewData传值方式ViewData的生命周期和View相同, 只对当前View有效.   ViewData["zd"] = dfdfd2:TempData传值方式   可以跨Action传递   TempData的数据至多只能经过一次Controller传递, 并且每个元素至多只能被访问一次,     例如一个用法为,抛出一个异常.跳转到error页面public ActionResult Index3(){      TempData["tempIndex&qu

CI中获取读操作的结果集行数+获取写操作的影响行数

本质:读操作,用mysql_num_rows函数,写操作用mysql_affected_rows函数 mysql_num_rows() 返回结果集中行的数目.此命令仅对 SELECT 语句有效.要取得被 INSERT,UPDATE 或者 DELETE 查询所影响到的行的数目,用 mysql_affected_rows(). CI中的方法: 读操作,获取行数: $query->num_rows() 该函数将会返回当前请求的行数.在本例子中, $query 表示当前 SQL 所产生的请求结果对象: