您的位置:首页 > 其它

CI框架学习笔记

2015-05-27 23:31 260 查看
     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.路由与伪静态

            配置文件appl
4000
ication/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')?>"设置提示

            修改语言包可以换成中文的报错

   
 

   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: