• 个人技术博客(α)


    个人技术博客(α)

    标签: 软工实践 PHP CI


    CodeIgniter(CI)框架学习

    CI框架学习的小结,做了点微不足道的工作。

    简要目录
    一、框架介绍
    二、框架目录结构
    三、控制器建立与访问
    四、载入视图
    五、辅助函数与自定义函数
    六、表单验证
    七、定义使用模型及配置数据库
    八、AR类操作数据库
    九、图片上传和缩略图
    十、分页类使用


    一、框架介绍

    CodeIgniter是一套给PHP网站开发者使用的应用程序开发框架和工具包,其具有以下特点

    • 轻量、快速、功能强大
    • 基于M-V-C模型
    • 生成简洁的URL
    • 扩展性强
    • 不需要模板引擎,性能最大化
    • 拥有一个友好的中文用户社区

    M-V-C关系导图


    二、框架目录结构

    仅列出常用目录

    • CI(项目根目录)
      • application(应用)
        • config(配置)
        • controllers(控制器)
        • models(模型)
        • views(视图)
      • system(系统)
        • core
          • Common.php(自定义函数)
          • Router.php(路由控制)

    三、控制器建立与访问

    建立

    class Home extends CI_Controller {
        //默认显示函数
        public function index() {
            echo 'success!';
        }
    }
    

    访问
    通过url访问:.../index.php/home/index
    index.php:单入口
    home:控制器名
    index:方法名,若为空则默认为index


    四、载入视图

    载入
    在控制器中

    //传入视图的数据
    $data = 'data';
    
    //file_name为视图文件名(.php后缀可省略)
    $this->load->view('folder_name/file_name', $data);
    

    在视图中处理分配的数据

    <?php foreach($data as $v): ?>
    <li><?php echo $v ?></li>
    <?php endforeach ?>
    

    五、辅助函数与自定义函数

    辅助函数
    1.system/helpers或application/helpers文件夹
    2.application/helpers优先级高于system/helpers

    手动载入
    在控制器中

    //name为辅助函数名
    $this->load->helper('name');
    

    自动载入
    在application/config/autoload.php中修改语句进行配置

    $autoload['helper'] = array('name');
    

    url辅助函数
    前提:载入url辅助函数

    • site_url() 获得url参数路径
    • base_url() 获得根路径
    • redirect() 跳转

    site_url()base_url()可传递参数,得到参数与获得路径的连接,即site_url('url')site_url() . 'url'等价

    扩展自定义函数
    在system/core/Common.php下,添加自定义函数代码段,自动全局加载

    //自定义格式化打印函数
    fuction p($arr) {
        echo '<pre>';
        print_r($arr);
        echo '</pre>';
    }
    

    六、表单验证

    载入验证类

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

    设置规则

    $this->form_validation->set_rules('name值','标签名称','规则');
    

    执行验证(返回bool值)

    $this->form_validation->run();
    

    表单验证辅助函数

    • set_value('name') 重填数据,保留未通过验证的数据
    • form_error('name', '<span>', '</span>') 显示错误
    • set_select() 保留选择情况
    • set_checkbox() 保留选择情况
    • set_radio() 保留选择情况

    创建通用表单验证

    在application/config下新建form_validation.php,添加如下代码

    <?php
    $config =  array(
        'form1' => array(
            'field' => '',
            'label' => '',
            'rules' => ''
        ),
        'form2' => array(
            'field' => '',
            'label' => '',
            'rules' => ''
        ),
        ...
    )
    ?>
    

    在控制器中调用

    //返回bool值
    $status = $this->form_validation->run('form1');
    

    七、定义使用模型及配置数据库

    模型定义
    在application/model下新建modeltest_model.php

    class Modeltest_model extends CI_Model {
        //测试函数
        public function test() {
            ...
        }
    }
    

    模型使用
    在控制器中

    //载入模型
    this->load->model('modeltest_model', 'test');
    
    //使用模型中方法
    this->test->test();
    

    配置数据库
    本地建立数据库后,在application/config/database.php中进行配置

    $active_group = 'default';                          //多个数据库时配置
    $query_builder = TRUE;                              //TRUE为继承AR模型
    
    $db['default'] = array(
    	'dsn'	=> '',
    	'hostname' => 'localhost',                      //主机名称
    	'username' => '',                               //用户名
    	'password' => '',                               //用户密码
    	'database' => '',                               //数据库名
    	'dbdriver' => '',                               //驱动(数据库类型)
    	'dbprefix' => '',                               //前缀
    	'pconnect' => FALSE,
    	'db_debug' => (ENVIRONMENT !== 'production'),
    	'cache_on' => FALSE,
    	'cachedir' => '',
    	'char_set' => 'utf8',
    	'dbcollat' => 'utf8_general_ci',
    	'swap_pre' => '',
    	'encrypt' => FALSE,
    	'compress' => FALSE,
    	'stricton' => FALSE,
    	'failover' => array(),
    	'save_queries' => TRUE
    );
    

    在application/config/autoload.php中修改该语句进行配置,使数据库自动加载

    $autoload['libraries'] = array('database');
    

    调试模式
    开启调试模式

    $this->output->enable_profiler(TRUE);
    

    八、AR类操作数据库

    在模型中使用AR类对数据库进行操作

    插入

    //插入的数据,采用数组格式(键名=>键值)
    $data = array (
        //使用输入类获得数据
        'name' => this->input->post('name')
    );
    
    $this->db->insert('table_name', $data);
    

    查询

    //全表查询,返回一个数组
    $data = $this->db->get('table_name')->result_array();
    
    //关联表查询
    //使用join关联表,传入参数:关联表名、条件
    //使用order_by对结果进行排序,传入参数:排序项、升降序
    $data = $this->db->select('name')->from('table1_name')->join('table2_name', 'table1_name.id=table2_name.id')->order_by('id', 'asc')->get()->result_array();
    
    
    //条件查询,where传入参数条件数组(键名=>键值)
    $data = $this->db->where(array('name'=>$name))->get('table_name')->result_array();
    

    修改

    //update传入三个参数:表名,数据,条件
    $this->db->update('table_name', $data, array('name'=>$name));
    

    删除

    //delete传入两个参数:表名,条件
    $this->db->delete('table_name', array('name'=>$name))
    

    九、图片上传和缩略图

    图片上传
    在控制器中先进行上传配置

    $config[`upload_path`] = '';                            //文件路径(本地)
    $config[`allowed_typ`] = '';                            //允许上传类型
    $config['max_size'] = '';                               //最大容量
    $config['max_width'] = '';                              //最大宽度
    $config['max_height'] = '';                             //最大高度
    $config['file_name'] = time() . mt_rand(1000, 9999);    //文件名,随机命名可防止文件覆盖
    

    载入上传类

    //$config为上传配置
    $this->load->library(upload, $config);
    

    上传

    //name为文件表单名,返回bool值(上传情况)
    $status = $this->upload->do_upload('name');
    

    返回信息

    $info = $this->upload->data();
    

    缩略图

    配置

    $arr['source_image'] = $info['full_path'];  //源图片路径,从上传图片的info中获得
    $arr['create_thumb'] = FALSE;               //创建预览图像
    $arr['maintain_ratio'] = TRUE;              //保持纵横比
    $arr['width'] = 200;                        //宽度
    $arr['height'] = 200;                       //高度
    

    载入缩略图类

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

    执行缩放动作

    //返回bool值
    $status = $this->image_lib->resize();
    

    十、分页类使用

    在控制器中,载入分页类

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

    配置

    $perPage = 3;                           //定义每页条数
    
    $config['base_url'] = '';               //分类页地址
    $config['total_rows'] = '';             //总行数
    $config['per_page'] = $perPage;
    $config['uri_segment'] = 4;             //偏移量
    
    //自定义分页配置
    $config['first_link'] = '第一页';
    $config['prev_link'] = '上一页';
    $config['next_link'] = '下一页';
    $config['last_link'] = '最后一页';
    
    $this->pagination->initialize($config); //载入配置
    

    创建分页链接

    $data['links'] = $this->pagination->create_links();
    

    数据库操作

    //使用辅助函数获取偏移量
    $offset = $this->uri->segment(4);
    
    //对数据库进行limit操作
    $this->db->limit($perPage, $offset);
    

  • 相关阅读:
    border-radius的8个属性值_画半圆、叶子等
    CSS的background简写方式(转)
    frameset左右栏锚点定位实例
    HTML5新增
    安装MSI报2503的错误
    当前标识(IIS APPPOOLDefaultWebSite)没有对“C:WindowsMicrosoft.NETFramework64v2.0.50727Temporary ASP.NET Files”的写访问权限 解决方案
    Windows设置相关性AFFINITY,修改使用核心数
    Yaml格式文件处理
    Vs2017离线安装包制作
    Vs2017常用快捷键
  • 原文地址:https://www.cnblogs.com/zhengshuhao/p/7811707.html
Copyright © 2020-2023  润新知