zoukankan      html  css  js  c++  java
  • ci框架(二)

    自定义SQL语句                                                                            

    当提供的API满足不了我们对SQL语句的要求的时候,我们通常是自己来写SQL语句,CI也提供了比较强大了,能够满足我们需求的一般的sql的API。

    $res=$this->db->select('id,name')
        ->from('表名')
        ->whrer('id >=',5)//注意id后面要有个空格
        ->limit(3,2)//这里与sql的limit是顺序是反的
        ->order_by('id desc ')
        ->get();//翻译成sql语句
    var_dump($res->result());
    echo $this->db->last_query();//先是最近一条SQL

    自定义扩展控制器                                                                          

    在application/core中新建MY_Controller.php

    class MY_Controller extends CI_Controller
    {
        public function __construct()
        {
            parent::__construct();
            //一定呀先调用父类的构造方法
            //登录验证、权限验证、其他操作。。。
        }
    }

    同时需要在application/config/config.php中配置一下:

    $config['subclass_prefix'] = 'MY_';

    自定义扩展模型                                                                            

    在application/models中创建user_model.php

    class User_model extends CI_Model
    {
        public function getAll()
        {
            $res = $this->db->get('表名');
            return $res->result();
        }
    }

    在控制器中调用自定义模型

    application/controllers:

    class User extends MY_Controller
    {
        public function index()
        {
            $this->load->model('User_model');//调用以类名为主,而不是文件名
    $list = $this->User_model->getAll();//调用模型获取数据
    $this->load->view('user/index',array('list'=>$list));//加载视图  
        }   
    }

    加载模型的时候可以给模型取一个名字:

    $this->load->model('User_model','user');//调用以类名为主,而不是文件名        
    $list = $this->user->getAll();//调用模型获取数据

    Url相关函数                                                                             

    在表单验证的时候,需要把数据传给控制器,怎么准确的而且可扩展的写action呢,调用API:

    public function addView()
    {
        $this->load->helper('url');//为了不把表单传递的地址写死,用url函数
        $this->load->view('user/add');
    }

    在user/add.php视图当中:

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

    如果是index.php目录的话,用:

    base_url();

    这个API。

    同时,每次加载url很麻烦,也可是设置成自动加载,在config/config.php中修改:

    $config['helper'] = array('url');

    可能在后面的版本中就没有这个自动加载了。

    路由                                                                                           

    image

    想要把12.html中的.html删了怎么办,这就需要匹配路由规则了(在config/routes.php):

    $route['rouxx/showxx/([d]+).html'] = 'rou/show/$1';//插入这句话

    image

    分页                                                                                           

    • 必须知道的一些参数

    总共有多少条记录

    一页要有多少条记录

    总共多少页

    当前页前后要显示多少个分页链接

    • 设置一些CI分页类基本参数
    //总条数
    $config['total_rows']
    //一页显示几条
    $config['per_page']
    //定义当前页的前后各有几个数字链接
    $config['num_links']
    //定义没有分页参数,主URL
    $config['base_url']
    • 调用CI的分页类
    $this->load->library('pagination');
    • 执行分页方法
    $this->pagination->initialize($config);
    • 输出分页链接
    echo $this->pagination->create_links();
    • 查询部分数据(limit)
    echo $this->db->limit($num,$start);  //从$start查$num条
    <?php 
    if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    
    class Page extends CI_Controller {
    
        public function user_add(){
            $this->load->model('test_m');
    
            for ($i = 1;$i <= 100;$i++){
                $name = 'u'.$i;
                $arr = array("usid"=>$i,"uname"=>$name,"upass"=>123456);
                $this->test_m->user_insert($arr);
    
            }
        }
    
        public function pagelist(){
            $this->load->model('test_m');
            $user = $this->test_m->user_select_all();
            $allnum = count($user);
            $pagenum = 20;
    
            $config['total_rows'] = $allnum;
            $config['per_page'] = $pagenum;
            $config['num_links'] = 3;
            $config['base_url'] = "/CI/index.php/page/pagelist";
            $config['use_page_numbers'] = true;
    
            $this->load->library('pagination');
            $this->pagination->initialize($config);
    
            var_dump($this->pagination->create_links());
            echo $this->pagination->create_links();
    
            echo "<br />";
            $id = $this->uri->segment(3);  //获得url第三段字符
            $id =$id ? $id:1;
            $start = ($id - 1) * $pagenum;
            $list = $this->test_m->user_select_limit($start,$pagenum);
            var_dump($list);
        }
    }

    上传文件                                                                                    

    视图 /views/up.php:

    <html>
        <form action="ci/CodeIgniter_2.2.0/index.php/upload/up" method="post" enctype="multipart/form-data">
            <input type="file" name="upfile" />
            <input type="submit" name="sub" value="提交" />
        </form>
    </html>

    控制器:

    • 定义一个数组,设置一些与上传相关的参数
    $config['upload_path'] = './uploads/';
    //设置允许上传的类型
    $config['allowed_types'] = 'gif|jpg|png';
    $config['max_size'] = '100';
    //如果是图片还可以设置最大高度和宽度
    $config['max_height'] = 768;
    $config['max_width'] = 1024;

    还可以设置其他的一些额外参数,详细看用户手册。

    • 调用CI的上传通用类,并执行上传
    //upload为调用的类名,全小写
    $this->load->library('upload',$config);
    //如果上传框的name写的是userfile,那就不用传参数了,如果不是,把name的值传进去
    $this->upload->do_upload('上传框的name');
    • 接收出错信息或成功信息
    //出错信息
    $error = array('error' => $this->upload->display_error());
    //成功信息
    $data = array('upload_data' => $this->upload->data());
    <?php 
    if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    
    class Upload extends CI_Controller {
        //显示带表单的视图
        public function index(){
            $this->load->view('up');
        }
        //显示上传信息
        public function up(){
            $config['upload_path'] = './uploads/';
            $config['allowed_types'] = 'gif|jpg|png';
            $config['max_size'] = "2000";
            $this->load->library('upload',$config);
            //打印成功或错误的信息
            if($this->upload->do_upload('upfile'))
            {
                $data = array("upload_data" => $this->upload->data());
                var_dump($data);
            }
            else
            {
                $error = array("error" => $this->upload->display_errors());
                var_dump($error);
            }
        }
    }

    Session                                                                                   

    利用CI类实现session登录

    • 修改配置文件(config.php)
    //生成一个随机不重复的字符串走位加密的key保存到config.php的encryption_key中
    $config['encryption_key']='adb8bf6d0ac4e17b42a80941582497a4';
    • 加载SESSION类
    $this->load->library('session');
    • 创建SESSION
    $array = array('id'=>3,'name'=>'jack');
    $this->session->set_userdata($array);
    • 查看SESSION
    $this->session->userdata(session名);
    • 删除SESSION
    $this->session->unset_userdata('SESSION名');

    image

    在config.php文件中修改一下配置,便可以对cookie加密:

    $config['sess_cookie_name']        = 'ci_session';
    
    $config['sess_expiration']        = 7200;
    
    $config['sess_expire_on_close']    = FALSE;
    
    $config['sess_encrypt_cookie']    = TRUE
    
    $config['sess_use_database']       = FALSE;
    
    $config['sess_table_name']        = 'ci_sessions';
    
    $config['sess_match_ip']        = FALSE;
    
    $config['sess_match_useragent']    = TRUE;
    
    $config['sess_time_to_update']    = 300;
    • 一次性数据,只能读取一次
    //设置
    $this->session->set_flashdata('test','aaaaa');
    //读取
    $test = $this->session->flashdata('test');
  • 相关阅读:
    将 Shiro 作为应用的权限基础
    CMD命令名详细大全
    使用jquery模拟请求,测试项目是否存在跨域限制
    springboot 2.1.4 源码默认logback-spring.xml
    IDEA 代码风格设置
    springboot 实现配置文件给常量赋值
    IDEA Can't Update No tracked branch configured for branch master or the branch doesn't exist.
    @EnableFeignClients 注解
    springboot 定时任务
    SpringCloud 学习网址记录
  • 原文地址:https://www.cnblogs.com/yydcdut/p/3849974.html
Copyright © 2011-2022 走看看