codeigniter ,看完这些,就可以用它做项目了

一、MVC
  1,入口文件
    唯一一个让浏览器直接请求的脚本文件
  2,控制器 controller
    负责协调模型和视图
  3,模型 model
    只负责提供数据,保存数据
  4,视图
    只负责显示,以及搜集用户的输入(表单)
  5,action 动作
    是控制器中的方法,用于被浏览器请求

--------------------------------------------
二、CI中的MVC
  1,pathinfo 模式 http://localhost/php/ci/index.php/控制器文件/动作
    application目录中
    controller 控制器
    views 视图
    models 模型

-------------------------------------------------------------------------
三、控制器
  1,不需要加后缀,直接是 类名.php
  2, 文件名全部小写
  3,所有的控制器需要直接或间接继承自 CI_Controller 类
  4,以下划线开头的方法,不能被浏览器请求,但是可以被内部调用
  5,控制器中只有public 的方法,才能作为动作
  6,方法名不区分大小写
  7,与类名相同的方法,会被php当做构造方法,因此不要创建与类名相同的方法

---------------------------------------------------------------------------------------
四、视图
  1,在控制器中如何加载视图
   

 $this->load->view(视图);//直接写视图名字,不用加扩展名

 


  2,视图中直接使用原生php代码,不使用模板引擎
  3,在视图中分配变量

    

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





    $data['title'] = "这是标题";     $data['list'] = $list;     $this->load->vars($data); //可以多次调用

 

    在视图中
      

<?php foreach($list as $item): ?>

<tr>

<td><?php echo $item['id']; ?></td>

<td><?php echo $item['name']; ?></td>

<td><?php echo $item['email']; ?></td>

</tr>

<?php endforeach; ?>

 


  4,推荐使用

       

 <?php foreach($list as $item):?>

 <?php endforeach; ?>

 


-------------------------------------------------------------------------------
五、ci的超级对象
  当前的控制器对象
  属性
  $this->load 
  装载器类的实例
  装载器类提供的方法:
  view() 装载视图
  vars() 分配变量
  database() 装载数据库操作对象
  model() 装在模型
  helper() 辅助函数

  $this->uri
  是CI_URI 类的实例
  CI_URI提供的方法:
    segment() 用于获取url中某一段的值 
  传统pathinfo
    入口文件.php/控制器/动作/参数1/值1/参数2/值2
  CI的pathinfo
    入口文件.php/控制器/动作/值1/值2
    $this->uri->segment(3);//对应 值1
    $this->uri->segment(4);//对应 值2

    public function index($p=0){
      echo $p;
    }
    $this->input() 输入类
    是CI_Input()的实例
    提供的方法
      $this->input->post('username');//$_POST['username'](无get,可以使用segment())
      $this->input->server('DOCUMENT_ROOT');

      在视图中,可以直接使用$this 来只用超级对象

------------------------------------------------------------------------------------------
六、数据库访问
   修改配置文件
   application/config/database.php

   将数据库访问对象,装载到超级对象的属性中 $this->db
    $this->load->database();
    $res = $this->db->query($sql);//返回一个对象
    $res->result(); //返回数组,数组中是一个一个的对象
    $res->result_array(); //返回二维数组,是关联数组
    $res->row(); //返回第一条记录,直接是一个对象
    $res->row_array();//第一条记录的数组


  程序实例
    1,查询
      

public function showusers(){

//装载数据库操作类

$this->load->database(); //装载成功之后会放入超级对象的属性中,默认属性名是db/ //var_dump($this->db); $sql = "select * from blog_user"; //返回一个对象 $res = $this->db->query($sql); // mysql_query() //var_dump($res); //返回值是一个对象 $users = $res->result(); //mysql_fetch_object(); 返回对象 //mysql_fetch_assoc(); 返回关联数组 $data['user_list'] = $users; $this->load->view('index/users',$data); }

 



2,添加

public function add{

$this->load->database(); $sql = "insert into blog_user (name,password) values ('mary',md5('mary'))"; $bool = $this->db->query($sql); if($bool){ //mysql_affected_rows echo $this->db->affected_rows(); //受影响行数 echo $this->db->insert_id(); //自增id } }

 


在上述两个例子中,存在安全问题,以及表前缀不能自动修改的问题,一以下例子针对这两个问题做了改进

1,修改(表前缀与参数绑定)

public function test8(){

//此处可以在autoload.php 中配置“自动加载”,$autoload['libraries'] = array('database');

//$this->load->database();





//$name = $this->input->post('name');

$data[0] = 'lili'; $data[1] = 'lili'; //$db['default']['swap_pre'] = 'swap_'; 数据库配置文件中的交换表前缀 $sql = "insert into swap_user (name,password) values (?,?)"; $bool = $this->db->query($sql,$data);//SQL语句中有多个?时,需要传入索引数组 if($bool){   echo "添加成功!"; } }

 




七、数据库中的AR模型(Active Record)
  1,在 database.php 文件中
    $active_record = TRUE;
  2,自动加载
    $autoload['libraries'] = array('database');
  3,在配置文件中,配置表前缀后,会自动添加
    

        $res = $this->db->get("表名"); //返回结果集对象

    $res -> result();



    $this->db->insert('表名',关联数组);     $bool = $this->db->update('表名',关联数组,条件);     $bool = $this->db->delete('表名',条件); 

 



连贯操作

// select id,name from tableName where id >= 3 order by id desc limit 2,3

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

->from('user') ->where('id >=',2) ->limit(3,2) //跳过2条取出3条数据 ->order_by('id desc') ->get(); var_dump($res->result()); echo $this->db->last_query();

 



->where() 的一些用法

// $res = $this->db->where('name =','zhongshan')->get('user');

// $res = $this->db->where('name !=','zhongshan')->get('user');

$res = $this->db->where(array('name' => 'mary','id >' => 2))->get('user');

 



  复杂的查询,请用 $this->db->query($sql,$data); //使用?绑定参数

八、如何扩展CI的控制器
  编写自己的控制器,application/core/MY_Controller.php文件
  其他控制器就可以继承自 MY_Controller 
  在config.php中,可以修改前缀 $config['subclass_prefix'] = 'MY_';

class MY_Controller extends CI_Controller{

  //构造方法会自动调用

   public function __construct(){     parent::__construct(); //调用父类的构造方法     //登陆验证...     //权限验证...   } public function funcname(){ }

 

九、模型
  继承自 CI_Model
  在模型中,可以使用超级对象的属性
  文件名全部小写,类名首字母大写
  建议使用 _model 做为后缀,防止和控制器类名冲突
  程序代码
  model
   

<?php 

/**

* 用户模型

* @author zhongshan <[email protected]>

*/

class User_model extends CI_Model{ //返回所有用户 public function getAll(){ $res = $this->db->get('user'); return $res -> result(); } } 

 


controller

<?php 

class User extends MY_Controller{   public function index(){     //加载模型,可以起一个别名,加载完成后,自动成为超级对象的属性     $this->load->model('User_model','user');     $list = $this->user->getAll(); //调用模型,获取数据     $this->load->view("user/index",array('list' => $list));   } }

 

views

<!DOCTYPE html>

<html lang="en">

<head>

  <meta charset="UTF-8">

  <title>Document</title>

</head>

<body>

  <?php var_dump($list) ?>

</body>

</html>

 



十、url相关函数
  $this->load->helper('url');//可以根据需要配置自动加载,在 autoload.php 中
  site_url('控制器/方法')
  base_url()

十一、设置路由
  application/config/routes.php
  //默认控制器
  $route['default_controller'] = "welcome";

  //http://localhost/php/ci/index.php/news/123456/4.html
  $route['news/[\d]{6}/([\d]+)\.html'] = 'article/show/$1';

十二、隐藏入口文件
  开启apache的rewrite模块,在httpd.conf 文件中
  LoadModule rewrite_module modules/mod_rewrite.so
  重启服务器
  在根目录下放入 .htaccess 文件

十三、分页类

//装载类文件

$this->load->library('pagination');

//每页显示10 条数据

$page_size = 10; $config['base_url'] = site_url('user/test'); // 一共有多少条数据 $config['total_rows'] = 100; //每页显示多少条 $config['per_page'] = $page_size; $config['first_link'] = '首页'; $config['next_link'] = '下一页'; $config['uri_segment'] = 3; //分页的数据查询偏移量在哪一段上 $this->pagination->initialize($config); $offset = intval($this->uri->segment(3)); //和 $config['uri_segment'] 对应 $sql = "select * from user limit {$offset},{$page_size}"; echo $sql; //创建链接 $data['links'] = $this->pagination->create_links(); $this->load->view('user/test',$data);

 

十四、文件上传 
  1,手动创建好上传目录
  2,程序实例
    表单

  <form action="<?php echo site_url('user/upload'); ?>" method="post" enctype="multipart/form-data">

    <input type="file" name="pic" /><input type="submit" value="提交" />

   </form>

 


    控制器

public function upload(){

  //上传目录需要手工创建

  $config['upload_path'] = './uploads/';   $config['allowed_types'] = 'gif|png|jpg|jpeg';   //生成新的文件名   $config['file_name'] = uniqid();   //装载文件上传类   $this->load->library('upload',$config);   $this->upload->do_upload('pic');   var_dump($this->upload->data());   //获取上传之后的数据   $data = $this->upload->data();   $filename = $data['file_name'];   echo $filename; }

 

十五、session

public function login(){

  //生成一个随机字符串作为一个加密用的 key

  //保存到 config.php 中的 $config['encryption_key'] = '';

  // echo md5(uniqid());exit;

  $this->load->library('session');   $user = array('id'=>3,'name'=>'jack');   // session_start();   // $_SESSION['user'] = $user;   $this->session->set_userdata('user',$user);   //不要在这里获取放入的数据,只有页面重新加载或跳转到别的url中,才能获取   //一次性的数据,只能读取一次   $this->session->set_flashdata('index','abcdefghij'); } public function show_session(){   $this->load->library('session');   //取 CI session 中的数据   $user = $this->session->userdata('user');   var_dump($user);   //下次刷新,就没有了   $test = $this->session->flashdata('index');   echo $test; }

 


十六、验证码

public function valid(){

  $this->load->helper('captcha');   $vals = array(     'word' => rand(1000,9999),     'img_path' => './captcha/',     'img_url' => base_url().'/captcha/',     'img_width' => 100,     'img_height' => 30,     'expiration' => 60*10 //过期时间,时间一到,会自动删除图片   );   $cap = create_captcha($vals);   echo $cap['image'];   echo $cap['word'];   session_start();   //验证时,对比 $_SESSION['cap']   $_SESSION['cap'] = $cap['word']; }

 

十七、表单验证
控制器文件

public function insert(){

  // var_dump($this->input->post('name'));



  $this->load->library('form_validation');   $this->form_validation->set_rules('name','用户名','required');   $this->form_validation->set_rules('email','邮箱','valid_email');   $bool = $this->form_validation->run();   if ($bool) {     //调用模型保存到数据库    }else{     //显示错误信息     $this->load->view('user/add');   } }

 


视图文件

<?php echo validation_errors(); ?>

<form action="<?php echo site_url('user/insert');?>" method="post">

name:<input type="text" name="name" value="<?php echo set_value('name');?>"><?php echo form_error('name','<span>','</span>'); ?><br> pass: <input type="password" name="pass"><br> age: <input type="number" name="age"><br> sex: <input type="text" name="sex"><br> email: <input type="text" name="email" value="<?php echo set_value('email');?>"><?php echo form_error('email','<span>','</span>'); ?><br> <input type="submit" value="提交"> </form> 

 













你可能感兴趣的:(CodeIgniter)