zoukankan      html  css  js  c++  java
  • CI(CodeIgniter)框架

    CI是什么?

      CodeIgnitert是一个轻量级但功能强大的PHP框架

      基于MVC设计模式,提供了一套丰富的类库

      简单易学,高效实用

    官方网站

      www.codeigniter.com

    中文网站

      http://codeigniter.org.cn

    特点

      你想要一个小巧的框架

      你需要出色的性能

      你需要广泛兼容标准主机上的各种PHP版本和配置

        CI  2.1.4 需要  php5.1.6

      你想要一个几乎只需0配置的框架

      你想要一个不需使用命令行的框架

      你想要一个不许坚守限制性编码规则的框架

      你不希望被迫学习一门模板语言(虽然可以选你你喜欢的模板解析器)

      你不喜欢复杂,热爱简单

      你需要清晰完整的文档

    目录结构说明

       license.txt  许可协议

      user_guide    用户手册

      system     框架核心文件

      application  应用目录

      index.php   入口文件

     

     

     

     

     

     

    扩展loder

     

    -----------------------------------------------

    MVC

      1.入口文件

        唯一 一个让浏览器直接请求的脚本

      2.控制器

        协调模型和视图

      3.模型

        提供数据,保存数据

      4.视图

        只负责显示

        表单。。。

      5.动作action

        是控制器中方法,用于被浏览器直接请求

    CI中的MVC

      访问url使用的是pathinfo(入口文件.php/控制器/动作)

      application目录中:

        controllers  控制器

        models    模型

        views    视图

      默认控制器是welcome,默认动作是welcome

    控制器

      1.不需要加后缀,直接是类名+.php

      2.文件名全部小写,例如user.php

      3.所有的控制器,直接或间接继承CI_Controller类

      4.控制器中,对动作(方法)要求,否则将不能被浏览器请求

        不能以下划线开头,应该是public的

      5.与类名相同的方法,会被当做构造方法,相当于__construct(){}

    视图

      1.在控制器中如何加载视图

        //直接写视图名字,不屑扩展名,如果有子目录,则写上目录名

        $this->load->view(视图);(可以多次调用)

      2.视图中直接使用原生php代码,不适用模板引擎

      3.推荐使用

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

        <?=$item['name']?>

        <php endforeach;?>

    超级对象

      当前的控制器对象

      提供了很多属性:

        this->load

          装载器类的实例system/core/Loader.php

          装载器提供方法:

            view()    装载视图

            vars()     分配变量到视图

            database()     装载数据库操作对象

            model()    装载模型对象

            helper()     辅助函数

        this->uri

          是CI_URI类的实例system/core/URI.php

          CI_URI类提供的方法:

            segment(n)  用于获取url中的第n个参数

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

    echo $this->segment(3);//值1
    echo $this->segment(4);//值2
    
    //index.php/控制器/index/6
    public function index($p){
         echo $p;//输出6      
    }

         this->input  //输入类

          是CI_URI类的实例system/core/Input.php

          CI_URI类提供的方法:

            $this->input->post('username');  //$_post['username']

            $this->input->server('DOCUMENT_ROOT');  //$_SERVER['DOCUMENT_ROOT']

        在视图中,直接用$this来访问超级对象中的一些属性

    数据库访问

      修改配置文件application/config//database.php

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

       参数绑定

    $sql = "select * from blog_user where name=?";
    $this->db->query($sql,$name);//如果有多个问号时,需要传入一个索引数组
    
    //表前缀
    //目录 application/config/database.php
    $db['default']['dbprefix'] = 'blog_';
    $db['default']['swap_pre'] = 'blog_';
    //配置为一样,直接硬编码表前缀就行了,如果以后项目数据库表前缀发生变化,只需要修改$db['default']['dbprefix'] = 'new_';代码中的blog_会自动替换为new_

      db的自动加载

    //目录 application/config/autoload.php
    $autoload['libraries'] = array('database');
    //不需要:$this->load->database();

    //自增id
    $this->db->insert_id();
    //受影响行数
    $this->db->affected_rows();

    Active Record(AR)

      1.application/config/database.php     $active_record = TRUE;

      2.application/config/autoload.php   $autoload['libraries'] = array('database');

      3.在配置文件中,配置表前缀后,会自动添加

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

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

    $bool = $this->db->update('表名',关联数组,条件);//$this->db->update('user',$data,array('id'=>3));

    $bool = $this->db->delete('表名',条件);//$this->db->delete('user',array('id'=>2));

    //连贯操作
    $res = $this->db->select('id,name')
    ->from('user')
    ->where('id >=',3)  //id后应该有空格
    ->limit(3,2)  //跳过2条,取3条数据
    ->order_by('id desc')
    ->get();
    //显示最近一条SQL
    echo $this->db->last_query();

    //where
    $res = $this->db->where('name','mary')->get('user'); //等于可省略不写
    $res = $this->db->where('name !=','mary')->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

      控制器前缀MY_修改:application/config/config.php  $config['subclass_prefix'] = 'MY_';

    模型

      继承自CI_Model,在模型中可以直接使用超级对象中的属性

      文件名全小写;类名首字母大写,建议用_model作为后缀,防止和控制器类名冲突(如:User_model)

    url相关函数

      $this->load->helper('url');//可以根据需要配置自动加载  application/config/autoload.php  $autoload['helper'] = array('url');

      set_url('控制器/方法')

      base_url();//网站的根目录

    路由

    //application/config/route.php
    //
    默认控制器 $route['default_controller'] = 'welcome';
    //http://localhost/ci/index.php/news/201309/4.html
    $route['news/[d]{6}/([d]+).html'] = 'article/show/$1';//$1表示第一个参数,括号里得参数

     隐藏入口文件

    //1.开启apache的rewrite模块
    LoadModule rewrite_module moudles/mod_rewrite.so
    //2.重启apache
    //3.在入口文件同级目录下,放入一个.htaccess文件,内容如下:
    <IfModule mod_rewrite.c>
      RewriteEngine on
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^.*$ index.php/$1 [QSA,PT,L]
    </IfModule>

     分页

    //装载类文件
    $this->load->library('pagination');
    $this->load->helper('url');
    //每页显示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_segement'] = 3;//分页的数据查询偏移量在哪一段上
    
    $this->pagination->initialize($config);
    
    $offset = intval($this->url->segment(3));//与$config['uri_segment']对应
    $sql = "select * from blog_user limit $offset, $page_size";
    echo $sql;
    
    $data['links'] = $this->pagination->create_links();
    $this->load->view('user/test',$data);

     文件上传

    //1.手动创建好上传目录
    <form action="<?php echo site_url('user/upload')?>" method="post" enctype="multipart/form-data">
        <input type="file" name="pic" />
        <input type="submit" value ="上传">
    </form>
    
    //控制器,上传目录需手动 创建
    $config['upload_path'] = './uploads/';
    //允许上传文件的类型
    $config['allowed_types'] = 'gif|png|jpg|jpeg';
    $config['max_size'] = '1000';
    //生成新文件名
    $config['file_name'] = uniqid();
    //装载文件上传类
    $this->load->library('upload',$config);
    $this->upload->do_upload('pic');
    
    var_dump($this->upload->data());
    //获取上传之后的数据
    $data = $this->upload->data();
    echo $data['file_name'];

     session

    //写入
    public function login(){
      //生成一个随机不重复的字符串作为加密用的key
      //保存到application/config/config.php
      //$config['encryption_key'] = 'adb8bf6dxxxxxxxxxxxxxx';
      echo md5(uniqid());exit;
      $this->load->library('session');
      $user = array('id'=>3,'name'=>'jack');
      //session_start();
      //$_SESSION['user'] = $user;//php写入session的方式
      $this->session->set_userdata('user',$user);
      //不在这里获取刚放入的数据
      //只有页面重新加载或跳转到别的url中,才能获取到
      
      //一次性的数据,只能获取一次
      $this->session->set_flashdate('test','aaaaaaaaaaaaaa');
    }
    //读出
    public function show_session(){
      $this->load->library('session');  
      //读取CI session种的数据
      $user = $this->session->userdata('user');
      var_dump($user);
    
      //下次刷新,就没有了
      $test = $this->session->flashdata('test');
      echo $test;
    }

     验证码

    public function test2(){
      $this->load->helper('url');
      $this->load->helper('captcha');
      $vals = array(
        ‘word’=>rand(1000,9999),//此项不写默认为字母
        'img_path' => './captcha',//此目录需要手动创建
        'img_url' => base_url().'/captcha',
        'img_weight' => 100,
        'img_height' => 30,
        'expiration' =>60*10 //过期时间,下次生成验证码时会把过期的验证码图片删除,60s*10min
      );
      $cap = create_captcha($vals);
      $this->load->view('user/test2',array('cap'=>$cap['image']));
    
      session_start();
      $_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();
      //var_dump($bool);
      if($bool){
        //调用模型保存到数据库
      }else{
        //显示错误信息
        $this->load->view('user/add');
      }
    }
    
    html:
    //输出所有的错误 <?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> password<input type="password" name="password" /><br> email<input type="text" name="email" value="<?php echo set_value('email') ?>" /> <?php echo form_error('email') ?><br> <input type="submit" value="submit" />
    <img src="<?php echo base_url(); ?>uploads/jh.jpg" alt="" width="100"> </form>
  • 相关阅读:
    原生和jQuery的ajax用法
    sublime常用快捷键
    用filter:grayscale将图片过滤成灰色
    Docker搭建Zookeeper集群问题总结
    Linux下jdk环境配置
    window MySQL解压缩版部署及配置
    Windows下Nginx的配置及配置文件部分介绍
    JS 特性:可选链(?.)
    509道Java面试题解析:2020年最新Java面试题
    阿里面试题BIO和NIO数量问题附答案和代码
  • 原文地址:https://www.cnblogs.com/qjykn/p/10813441.html
Copyright © 2011-2022 走看看