CI框架学习笔记

     CI学习笔记
     1.
     2
     3.模型:提供数据,保存数据
     4.视图view:只负责显示
     5.动作action:是控制器中的方法,用于浏览器请求
     6.CI中的mvc:
        访问url使用的是pathinfo模式;如:入口文件.php/控制器/动作;
        application目录中
             controllers   控制器,默认控制器是welcome,默认动作是index
      models    模型
      views     视图
     
     
      控制器:
        1)不要加后缀
        2)文件名全部小写
        3)所有的控制器,直接或间接的继承CI_Controller类
        4)动作要求只有public方法,不能以下划线开头才能进行访问,与类名相同的是构造方法
      视图:
         1.加载视图:this->load->view('')加载视图,一般视图命名都是控制器名+控制器中的方法名,但是为了区分开各类视图,
           所以像user的文件都放在user文件夹,news的文件都放在news的文件夹,加载视图时也就成了加载子目录中的视图  控制器名/控制器中的方法名
      2.直接使用原生PHP代码
      模型:
         1.一个模型加载好,自动成为超级对象的属性
     7.一些内置函数
         $this->load->vars('title','这是标题')是分配变量函数,类似smarty中的assign;
      推荐使用短标签,不使用花括号
     8.CI超级对象中的URI
      超级对象有这些:当前的控制器对象
 提供了很多属性
 $this->load
    装载器类的实例:system/core/loader.php
装载器类的提供方法:
           view()装载视图
vars()分配变量到视图
database()装载数据库操作对象,装载成功后会放入超级对象的属性中,默认属性名是db,var_dump($this->db);
         $this->db->query返回的是对象==mysql_query
helper()
 $this->uri是CI_URI的一个实例:system/core/URI.php
               CI_URI类提供的方法:
分段获取,$this->uri->segment();获取对数,就是pathinfo模式的;获取url的参数
传统的pathinfo模式
    入口文件.php/控制器/动作/参数1/值1/参数2/值2
而ci是这样的
    入口文件.php/控制器/动作/值1/值2
 $this->input
               是CI_INPUT中的实例,system/core/input.php
$this->input->post('')
$this->input->没有get,因为get是分段取了
$this->input->server
在视图中也可以直接$this超级对象的属性
    9.数据库操作
          数据库访问:修改配置文件:application/config/database.php
     操作数据库访问对象。装载到超级对象属性中的$this->db
          $this->load->database();
          $res=$this->db->query($sql)返回对象
          $res->result()返回数组,里面是一个一个的对象  
     $res->result_array()返回二维数组,里面是关联数组
     $res->row()//返回的是第一条数据,直接是一个对象
     $this->db->affected_rows()返回受影响行数
     $this->db->insert_id()返回插入号
     
     autoload文件里修改这些
     参数绑定:$sql='select * from blog_user where name=?';
               $this->db->query($sql,$name);//如果有多个问号时,需要传入一个索引数组
   
     表前缀:$db['default']['swap_pre']='要设的前缀';
             $db['default']['dbprefix']='要设的前缀';
     配置为一样,代码中,直接硬编码表前缀就行了,如果以后项目数据表前缀发生变化,只需要修改$db['default']['dbprefix']='新表前缀'
     就行,代码中会自动修改
     
     db的自动加载
             1、application/config/database.php,将$active_record=TRUE
     2.在配置文件中配置表前缀会自动添加:$this->db->get('表名')//返回结果集对
     3.$this->db->insert()可以向表中插入数据
     4.$this->db->update(表名,$data是要更新数据的数组,array('id'=>3))更新id=3的记录
     5.AR连贯操作
           $this->db_select('id','name')
    ->from('user')
    ->where('id>=',3)
    ->limit(2,3)//这里是跳过三条取两条,这和普通sql是相反的
    ->order_by('id desc')
    ->get();获取数据
     6.$this->db->last_query()是显示的最后一次执行的sql语句
        复杂的查询,使用$this->db_query($sql,$data),使用问号绑定参数
    10.url相关函数
            $this->load->helper('url');
    //可以通过配置自动加载,在application/config/autoload.php中,加入$autoload['helper']=array('url')
    
            site_url('控制器/方法')函数:比如提交表单时,返回以config.php中指定的base_url和index_page还有传递给函数的uri段参数拼接成的字符串antion=site_url('控制器/方法')
    base_url()函数:是网站的根目录,
    11.路由与伪静态
            配置文件application/config/routes.php中,
    //默认路由
    $route['default_controller']='welcome'
    正则中把.html通过替换掉
    htaccess是apache的重写规则,把其放在根目录,然后开启apache重写功能就可以
    一个样例:
    <IfModule mod_rewrite.c>
      ReWriteEngine on
      ReWriteCond %[REQUEST_FILENAME] !-d
      ReWriteCond %[REQUEST_FILENAME] !-f
      ReWriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
    </IfModule>
    12.CI中的分页类
            首先载入分页类$this->load->library('pagination')
    载入url类$this->load->helper('url');
    //获得基础路径,获得路径之前要载入url类
    //基础路径是在分页的时候用的
    $config['base_url']=site_url('控制器/方法');
   
    $config['uri_segment']=页码在第几段
    $config['total_rows']=//总记录条数
    $config['per_page']=//每页显示的数目
    $config['first_link']='首页'
    $config['next_link']='下一页'
    $config['prev_link']='上一页'
   
   
    //偏移量要在url地址段中获取,由于ci的分页类比较特殊,显示的是跳过的条数
    通过
    $offset=intval($this->uri->segment('第几段是跳过的条数'))
   
    $this->pagination->initialize($config);
    $data['links']= $this->pagination->create_links();
    $this->load->view('视图名',$data)
    13.ci中的文件上传
            //定义上传路径
            $config['upload_path']=
    //上传类型
    $config['upload_types']=''
    //最大限制
    $config['max_size']
    //给上传的文件命名
    $config['file_name']=,如uniqid()
    $this->load->library('upload',$config);
    $this->upload->do_upload('表单名字')
    $this->upload->data()方法是获取文件上传后的数据
    14.CI中的session
            
    默认不适用php原生session,会借助cookie机制;
    //要生成一个随机不重复的字符串作为默认加密用的key,保存到application/config/config.php里的$config['encryption_key'] = '';
    $this->load->library('session')
    $user=array('id'=>3,'name'=>'sgd');
    $this->session->set_userdata('user',$user)
    只有页面重新加载或者转到别的url中,才能获取到刚才放入的数据
    //取session中的数据
    $this->session->userdata()
    //如果不想在cookie中暴漏数据,可以在application/config/config.php中将config['sess_encrypt_cookie']='true'即可
    $this->session->flashdata()是一次性闪存session,再刷新就会被ci自动销毁
    15.CI中的验证码
            第一步还是先加载
   
    $this->load->helper('captcha')
    $this->load->helper('url')
    $varl=array(
    'word'=>rand(1000,9999),
        'img_path'=>'./captcha/',//此目录需要手动创建
    'img_url'=>base_url.'/captcha/',
    'img_width'=>'',
    'img_height'=>'',
    'expiration'=>'',//这里是验证码图片在文件夹中保存几秒,下次生成便会删除前几次的图片
    );
    //创建验证码
    $cap=create_captcha($varl);
    $cap['image']是验证码图片,而$cap['word']是验证码内容,将其放入$_SESSION中就可以
    //将验证码放在视图中
    $this->load0>view('放在的视图',array('cap'=>$cap['image']));
    16.CI中的表单验证
            前面加上echo validation_errors()来防止浏览器不支持js时报错
            //加载表单验证库
            $this->load->library('form_valiadtion')
    $this->form_validation->set_rules('name','用户名','required'),格式就是这样,required是必填,valid_email是合法邮箱
    $bool=$this->form_valiadtion->run()//自动验证,成功返回true,失败返回false
    if($bool)
       {//调用模型,保存到数据库}
    else 
       {//返回name的错误信息
    echo form_error('name','<span>',</span>)
     $this->load->view('重新加载视图');
    }
    表单中value="<?php echo set_value('name')?>"设置提示
            修改语言包可以换成中文的报错
   
 


   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值