ci框架

什么是MVC

mvc 是一种将应用程序的逻辑层和表示层分离开来的软件方法

使用ci的默认控制器

  • 可以在 application/routes.php 下设置 $route['default_controller'] = "";
  • 隐藏 index.php 入口文件,首先开启apache 的 Rewrite 重写规则
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond $1 !^(index.php|images|robots\\\\.txt)
RewriteRule  ^(.*)$ index.php/$1 [L]

表单验证类

  • 在载入该表单视图的控制器下的该方法下, 首先载入辅助函数 $this->load->helper('form');
  • <form action="控制器/方法名"> 提交回来的方法下
    载入$this->load->library('form_validation')
  • 然后就是用$this->form_validation->set_rules('表单元素的name 名',‘错误提示’,‘规则’);
  • 然后使用if($this->form_validation->run())进行判断,看是否符合规则
  • 当然当我们提交表单错误后,会对页面进行刷新,这时,我们就需要保留值以及提示错误信息了
    在该表单视图下的 input 下 使用 <?php echo set_value('name名')?> 和在下面一行使用
    <?php echo form_error('name名','<span>','</span>')?>
  • CI提供了一个更加简洁的方法给我们设置规则,在application/config下新建form_validation.php
<?php
  $config = array(
      'article'=>array(
        'field' =>'name 名',
        'label' => '错误提示',
        'rules' =>'规则'
    ),
);
?>
  • 最后只需要在$this->form_validation->run('article');

自定义函数

  • 可以在system/core/common.php 下自定义函数,它是全局加载的,在最下面加载
    这里算是成功之后的跳转
 function success($url,$msg){
    header("Content-Type:text/html;charset=utf-8");
    $url = site_url($url);
    echo "<script>alert('$msg');location.href='$url'</script>";  
    die;
}
  • 调试模式 $this->output->enable_profiler(true);但是必须载入模板;$this->load->view() 可以随便放

文件上传

  • 首先在控制器下,设置有关的配置
$config['upload_path']='image'; //与application 同级目录下,上传目录
$config['allowed_types'] = 'jpg|gif|png|jpeg'; // 定义上传类型,可以用 * 代替
$config['max_size'] = '10000';
$config['file_name'] = time().mt_rand(1000,9999);//使用时间戳定义文件名,不然的话相同名字的文件会被覆盖

//载入上传类,传入配置
$this->load->library('upload',$config);

// 执行上传动作
$status = $this->upload->do_upload('filename'); //do_upload('') 里面的值为<input type='file' name ="filename"> name的值

// 提示错误,与上面的不一样,类型不对或者路径不对,或者是大小超过出现的错误信息
$wrong=$this->upload->display_errors()
if($wrong){
  echo $wrong;
  die;
}

//返回信息
$info = $this->upload->data();
可以尝试打印一下
//print_r($info);

//缩略图----------------

//同样先设置一下配置,这里的数组可以随便设置,可以设置成$config[],主要是因为不想与上面发生冲突
$thumb['sourse_image'] = $info['full_path'];
$thumb['create_thumb'] = FALSE;
$thumb['maintain_ratio'] = TRUE; // 像素比
$thumb['width'] = 200;
$thumb['height'] = 200;

//载入 缩略图类
$this->load->library('image_lib',$thumb);
//执行动作
$thumb_status=$this->image_lib->resize();
 //同样需要判断一下是否缩略了
if(!$thumb_status){
  echo "thumb fail";
  die;
}



分页

  • 同样载入视图 $this->load->library('pagination')
  • 写配置
$perPage = 3 ; // 每页显示的条数

// 控制器/方法名
$config['base_url'] = site_url('article/index'); 
$config['total_rows'] = $this->db->count_all_results('artical');
//每页显示多少条
$config['per_page'] = $perPage;
$config['uri_segment'] = 3; //获取到上面base_url 

// 初始化pagination
$this->pagination->initialize($config);
//创建分页
$data['links'] = $this->pagination->create_links();

$offset =$this->uri->segment(3);
$this->db->limit($perPage,$offset);

$this->load->model('artical');
$data['artical'] = $this->artical->artical_category();
$this->load->view('check_artical.html',$data);
  • 另一实例
$this->load->library('pagination');
        $config = array(
                'base_url'       => site_url().'/'.$this->uri->segment(1).'/'.$this->uri->segment(2),
                'total_rows'     => $this->db->count_all('articles'),
                'per_page'       => 14,
                'num_links'      => 5,
                'first_link'     => FALSE,
                'last_link'      => FALSE,
                'full_tag_open'  => "<ul class='pagination'>",//关闭标签
                'full_tag_close' => '</ul>',
                'num_tag_open'   => '<li>', //数字html
                'num_tag_close'  => '</li>',    //当前页html
                'cur_tag_open'   => "<li class='active'><a href='javascript:void(0),'>",
                'cur_tag_close'  => "</a></li>",
                'next_tag_open'  => '<li>', //上一页下一页html
                'next_tag_close' => '</li>',
                'prev_tag_open'  => '<li>',
                'prev_tag_close' => '</li>',
                'prev_link'      => "<i class='iconfont'></i>",
                'next_link'      => "<i class='iconfont'></i>"
       );
        $this->pagination->initialize($config);
        $data=array(
                 'article'       => $this->Article_model->get_article($id=FALSE,$config['per_page'],$this->uri->segment(3)), //$this->uri->segment(3) 就是上面设置的per_gage 参数
                 'article_nums'  => $this->db->count_all('articles'),
                 'categoryes'    =>$this->Categoryes_model->get_categoryes() //栏目
              ); 

       $this->load->view('article_list',$data);

子目录下使用默认控制器

  • 在根目录下的index.php 添加代码 $routing['directory'] = 'admin';
  • 然后在application/config/routes.php 的默认控制器下添加 控制器名称 ,比如 $route['default_controller'] = 'flashadmin';

CI框架的一些常量

我们可以在system/common.php,这个文件是用来加载基类库和公共函数的,也就是说在里面创建函数可以直接使用
我们创建一个打印出ci框架的系统常量

function print_const(){
    $const = get_defined_constants(TRUE);
    p($const['user']);  
}

function p($arr){
    echo '<pre>';
    print_r($arr);
    echo '</pre>';
}

结果如下:

Array
(
    [ENVIRONMENT] => development
    [SELF] => index.php
    [BASEPATH] => G:\xampp(1)\htdocs\wechat2016\system\
    [FCPATH] => G:\xampp(1)\htdocs\wechat2016\
    [SYSDIR] => system
    [APPPATH] => G:\xampp(1)\htdocs\wechat2016\application\
    [VIEWPATH] => G:\xampp(1)\htdocs\wechat2016\application\views\
    [CI_VERSION] => 3.0.6
    [SHOW_DEBUG_BACKTRACE] => 1
    [FILE_READ_MODE] => 420
    [FILE_WRITE_MODE] => 438
    [DIR_READ_MODE] => 493
    [DIR_WRITE_MODE] => 493
    [FOPEN_READ] => rb
    [FOPEN_READ_WRITE] => r+b
    [FOPEN_WRITE_CREATE_DESTRUCTIVE] => wb
    [FOPEN_READ_WRITE_CREATE_DESTRUCTIVE] => w+b
    [FOPEN_WRITE_CREATE] => ab
    [FOPEN_READ_WRITE_CREATE] => a+b
    [FOPEN_WRITE_CREATE_STRICT] => xb
    [FOPEN_READ_WRITE_CREATE_STRICT] => x+b
    [EXIT_SUCCESS] => 0
    [EXIT_ERROR] => 1
    [EXIT_CONFIG] => 3
    [EXIT_UNKNOWN_FILE] => 4
    [EXIT_UNKNOWN_CLASS] => 5
    [EXIT_UNKNOWN_METHOD] => 6
    [EXIT_USER_INPUT] => 7
    [EXIT_DATABASE] => 8
    [EXIT__AUTO_MIN] => 9
    [EXIT__AUTO_MAX] => 125
    [MB_ENABLED] => 1
    [ICONV_ENABLED] => 1
    [UTF8_ENABLED] => 1
)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容