标签:
一、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
标签:
原文地址:http://www.cnblogs.com/520fyl/p/5396407.html