一、 CI框架的MVC导图

二、 CI框架目录文件介绍

1index.php  单入口

        整个框架对外暴露的唯一访问文件

2application  应用文件(放置用户信息,用户控制器、用户模板等)

application/cache            --->   缓存

application/config            --->   配置文件

application/controllers        --->   控制器

application/core             --->   核心文件

application/errors            --->   错误(数据库连接错误等)

application/helpers           --->   辅助函数文件夹

application/hooks            --->   钩子文件

application/language         --->   语言

application/libraries          --->   通用类库

application/logs             --->   日志

application/models           --->   模型

application/third_party        --->   第三方类库

application/views             --->   视图

3system  系统文件

system/core             --->   核心包(系统初始化、框架控制器等)

system/database         --->   数据库操作

system/fonts            --->   验证码、字体文件

system/helpers          --->   辅助函数

system/language         --->   语言包

system/libraries          --->   通用类库(包含购物车、表单验证、加密等)

三、 CI框架中的文件操作
1application/config/routes.php    (路由配置文件)

代码说明

1. $route['default_controller']
= 'home'; 

//设置默认 控制器为home,此时不需输入控制器名可直接访该控制器下的indexp.php文件   输入:http://www.tabb.com/ci/

注释:在CI.3版本后,不支持设置例如admin/home,这样在文件夹下的控制器文件路径,可参考相关修改方法,修改system/core/Route.php中的相关设置即可

2application/controllers/home.php (自己创建的控制文件)

controllers中文件的基础代码说明

1.页面首行代码

defined('BASEPATH') OR exit('No direct script access
allowed');

// 判断是否是单入口进入,如果不是,则停止访问

2. 设置类

class Home extends CI_Controller {

//定义类Home继承自CI_Controller 类名Home的首字母必须大写

public
function index()          //定义方法名为index

{

echo
"home";

}

public function hello()             //定义方法名为hello

{

echo
"hello world";

}

}

3. 载入视图

public function index()

{

$this->load->view('news/header');

$this->load->view('news/home');

//载入view文件中news文件夹中的home.php文件,如果文件不是php格式,需要补全文件名

$this->load->view('news/footer');

}

//支持同时载入多个文件进行显示,如上同时载入3个文件显示

4. 载入数据

public function index()

{

$data[“title”]=”这是标题”;

$this->load->view('news/header',$data);  // 将数据作为第二个参数传递进去即可

$this->load->view('news/home');

$this->load->view('news/footer');

}

在views页面中接受数据变量<h2><?php echo
$title ?>
</h2>,值得注意的是,只要第一个header视图中注入了变量,后续两个视图无需再次注入变量,也可使用相应的变量

5. 加载辅助函数

$this->load->helper('url');     //引入辅助函数url,具备以下三个方法

echo site_url();     //获取当前的url

echo base_url();                //获取根目录的url

redirect('home/hello');  //跳转指定的controller函数

6. 设置自动加载辅助函数

在application/config/autoload.php  文件下,找到$autoload[‘helper’]=array(‘url’);
,将需要加载的辅助函数名,传入数组中,即可实现全局都自动加载该辅助函数

7. 载入框架中的类(此处以表单验证为例)

public function index()

{

$this->load->helper('form');   //加载表单验证辅助函数

$this->load->view("index/home.html");

}

public function send()

{

//载入表单验证类

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

//设置规则

$this->form_validation->set_rules('title',
'标题', 'required|min_length[5]');

//此处传递的三个参数,”title”是需要验证的表单的name,”标题”是提示语,'required|min_length[5]'是验证规则,使用|分割,可以写入多个规则

$this->form_validation->set_rules(‘cid’, '栏目', 'required|min_length[5]');

//设置多个表单验证

//执行验证

$status =
$this->form_validation->run();  //验证结果为bool值

if ($status) {

echo "数据库操作";

} else {

$this->load->helper('form');

$this->load->view("index/home.html");  //不通过加载视图,返回提示信息

}

}

视图页面代码如下:

<form
action='<?php echo site_url("index/home/send")?>'
method="post">

//此处表单发送的地址是上述的home中的send方法

<table>

<tr>

<th>表单验证</th>

</tr>

<tr>

<td>

输入标题:<input
type="text" name="title" value="<?php echo set_value('title') ?>">   //set_value(),该方法可以将上一次提交的数值,重新设置在页面上

<?php echo
form_error('title',’<span>’,’</span>’)?>

//输出“form”辅助函数的提示内容,第一个参数是表单name,第二个是以什么开始,第三是以什么结束

</td>

</tr>

</table>

<input type="submit"
value="提交">

</form>

设置数组形式传递验证规则:

新建文件:cation/config/form_vadication.php  (必须使用这个文件名)

设置参数

$config=array(

‘test’ =>array(

array(

‘field’=> ‘title’,

‘label’=>’标题’,

‘rules’=>’ required|min_length[5]’

),

array(

‘field’=>
‘cid’,

‘label’=>’栏目’,

‘rules’=>’ required|min_length[5]’

)

)

)

在表单验证的方法中传入该变量

$this->form_validation->run(“test”);

ciurl路径说明

http://www.tabb.com/ci/index.php/home/hello

根目录下的单入口文件index.php再访问application/controllers中的视图控制文件home,再执行其中的hello方法,显示在页面上,如果方法名为index则url中可以省略该名字

CI中的图片上传并预览

public function send()     //设置上传图片的函数

{

$config['upload_path'] = './uploads/';    //配置上传图片的路径,按照路径创建文件夹

 $config['allowed_types']
= 'gif|jpg|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');   //应用包含上述配置的上传类方法,'fileName'为type=‘file’的input框的name,在此上传处执行上述上传方法,上传状态返回bool值

if (!$status) {    //如果没有上传图片,$status为false

error('必须上传图片');    //执行一个error函数

}

$wrong = $this->upload->display_errors();     //此处为传递图片的要求与设置的配置要求不相符时的bool返回值

if ($wrong) {     //如果传递图片的要求不符合设置要求

error($wrong); //执行一个error函数

}

$info = $this->upload->data(); //上述都不执行,则可获取传递的成功的图片信息

p($info);

die;

设置上传缩略图:(参考手册配置属性)

$arr['source_image'] = $info['full_path'];  //引入之前上传的图片路径

$arr['create_thumb'] = FALSE; //创建预览图像

$arr['maintain_ratio'] = TRUE; //保持缩放纵横比

$arr['width'] = 200;          //设置宽

$arr['height'] = 200; //设置高

$this->load->library('image_lib', $arr);    //引入缩略图类,并传入参数

$status = $this->image_lib->resize();       //执行缩略动作,返回执行状态

if (!$status) {

error("缩略图制作失败");

}

}

3application/models/home_model.php   (数据库模型操作文件)

引入一个数据模型方法

home_model.php文件中输入如下代码

class Home_model extends CI_Model            //表示类继承自CI类CI_Model

{

public function add()       //声明一个model的方法,该方法的名称为add

{

echo "这里是数据库模型";

}

}

application/controllers/home.php中输入如下:

public function modelTest()   //在modelTest方法中进行操作

{

$data["title"] = "这是标题";

$this->load->model('home_model', 'home');  //载入model文件,并将下述引用中的”home_model”名称改为”home”这样的简单别名

$this->home->add();        //引入上述载入model文件中的add方法

$this->load->view('home.php', $data);           //展示视图

}

引入数据库,MVC模型示例

1.application/config/database.php中进行配置

$active_group = 'default';  //设置需要展示的数据库名称与$db[]中的名称相对应

$query_builder = TRUE;    //设置是否使用system/database/db_query_builder.php中的方法

$db['default'] = array(     //设置数据库信息

'dsn' => '',

'hostname' =>
'localhost',       //数据库服务器地址

'username' => 'root',               //登录账号的名称

'password' => 'root',                //登录账号的密码

'database' => 'test',                  //具体的数据库名称

'dbdriver' =>
'mysqli',

'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

);

2.application/config/autoload.php 中配置自动载入数据库

$autoload['libraries'] = array('database');      //开启自动载入数据库

3.application/models/home_model.php 中进行相关操作

public function
test($data)

{

   $this->dbtest=$this->load->database('testbatabase',TRUE);  //手动加载数据库,并指定为属性dbtest

$this->db->insert("007_news", $data);  在表’007_news’中插入数据

}

4.application/controllers/home.php 中控制数据操作

$data = array('cname' => $this->input->post('cname'));  //获取变量的值,此处使用input输入类来获取数据,是为了安全,进行的预处理

$this->load->model('home_model', 'home');         //执行对应的model文件

$this->home->test($data);      //将获取的值,注入model的方法中

 

此处代码优化:

由于$this->load->model('home_model',
'home');载入数据模型这段代码在,controllers/home.php文件中许多函数方法都会用到,比如update,delete等,所以可以将其写入构造函数中,后续不需要写这段载入代码,即可直接调用该模型

public function
__construct( )  //载入构造函数

{

 parent::__construct();       //载入父级的构造函数

//需要在构造函数中执行的代码,必须写在父级构造函数载入后的代码下

$this->load->model('home_model', 'home');          //载入的代码

}

public function index()

{

$this->home->test();        //由于此类的构造函数载入了model,所以此处无需载入model代码,也能调用该model中的方法

$this->load->view('home.php');

}

5.application/config/config.php 中更改防跨站处理

$config['global_xss_filtering'] = TRUE;   //将此处的false改为true;可选择修改,改为true表示默认阻止post、get等的跨站请求

application/models/home_model.php中的数据库操作语句

1.查询数据

$data = $this->db->where(array('id' => '1'))->get('007_class_news')->result_array();

where中传递查询条件,最好传递一个数组

get获取需要查询数据的表名

result_array()返回数据格式为数组,不写array,则返回对象格式的数据

p($data);     //p函数是设置在system/core/common.php中的自定义数组打印函数

function p
($arr) {

echo
"<pre>";

echo print_r($arr);

echo "</pre>";

}

die;  //终止代码执行

使用get_where()将where和get合并成一步操作:

$data = $this->db->get_where(('007_class_news' , array('id' => '1'))->result_array();

2. 修改数据

public function update_home( $data, $cid ){

$this->db->update(‘007_class_news’ , $data ,
array(‘cid’=>$cid));

}

update方法中需要传递三个参数:

”007_class_news”是需要修改数据的表的名称

$data是需要修改的数据,需传递一个关联数组,字段名和数值

array(‘cid’=>$cid)是修改条件,此处$cid是传递的值,必须与表中的值一致,才修改该条数据

3. 添加数据

$this->db->insert(‘007_class_news’ , array(‘cname’=>$cname));

”007_class_news”是需要添加数据的表的名称

array(‘cname’=>$cname)是添加的数据,以关联数组形式传递

4. 删除数据

public function del_home($cid ){

$this->db-> delete (‘007_class_news’, array(‘cid’=>$cid));

}

”007_class_news”是需要删除数据的表的名称

array(‘cid’=>$cid)是删除条件,此处$cid是传递的值,必须与表中的值一致,才删除该条数据

4system/core/common.php (此处设置全局可调用的自定义函数)  

php CI框架基础知识的更多相关文章

  1. CI框架基础知识

    调用一个视图 a.调用一个视图 $this->load->view('视图文件名'); b.调用多个视图 $this->load->view('index_h'); $this ...

  2. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  3. PHP面试(二):程序设计、框架基础知识、算法与数据结构、高并发解决方案类

    一.程序设计 1.设计功能系统——数据表设计.数据表创建语句.连接数据库的方式.编码能力 二.框架基础知识 1.MVC框架基本原理——原理.常见框架.单一入口的工作原理.模板引擎的理解 2.常见框架的 ...

  4. DDD框架基础知识

    DDD框架基础知识 参考: https://www.cnblogs.com/zhili/p/OnlineStorewithDDD.html(领域驱动设计,分层架构) https://www.cnblo ...

  5. 4-1 Spring框架基础知识

    Spring框架基础知识 1.Spring 框架作用 主要解决了创建对象和管理对象的问题. 自动装配机制 2.Spring 框架 (Spring容器,JavaBean容器,Bean容器,Spring容 ...

  6. Spring框架基础知识

    本人博客文章网址:https://www.peretang.com/basic-knowledge-of-spring-framework/ Spring框架简介 Spring , 一个开源的框架 , ...

  7. 【ci框架基础】之部署百度编辑器

    在ci框架下加载编辑器,现在复习下内容.我的框架文件名称为ci 1.下载百度编辑器ueditor,http://ueditor.baidu.com/ 一般情况下下载ubuilder版即可,并将uedi ...

  8. .NET面试题系列[2] - .NET框架基础知识(2)

    3 程序集 面试出现频率:虽然很重要但不怎么出现,可能会考你定义,以及程序集包括什么,然后自然的话题就跑到反射上去了. 重要程度:8/10,很重要 需要理解的程度:知道程序集包括IL和元数据.知道元数 ...

  9. ABP VNext框架基础知识介绍(1)--框架基础类继承关系

    在我较早的时候,就开始研究和介绍ABP框架,ABP框架相对一些其他的框架,它整合了很多.net core的新技术和相关应用场景,虽然最早开始ABP框架是基于.net framework,后来也全部转向 ...

随机推荐

  1. Python的类(二)

    一.类的重写 对于父类的方法,只要它不符合子类模拟的实物的行为,都可对其进行重写.为此,可在子类中定义一个这样的方法,即它与要重写的父类方法同名.这样, Python将不会考虑这个父类方法,而只关注你 ...

  2. 实用脚本 1 -- 安装Ctags

    Ctags是vim下方便代码阅读的工具,一般VIM中已经默认安装了Ctags,它可以帮助程序员很容易地浏览源代码. 1.如果系统中没有此工具用如下方法安装:    到ctags官网下载源码,解压后   ...

  3. C++学习007-使用exit退出进程

    使用exit可以实现退出当前进程. 如下 在程序接收到一个字符后,就退出进程 编写环境 vs2015 int main() { int a = 10, b = 20; std::cout <&l ...

  4. 如何用Fiddler 拦住RestAssured发出的请求

    用RestAssured 发出的请求并不能直接被fiddler 拦截,可以在初始化的时候做出如下配置: RestAssured.proxy("localhost", 8888); ...

  5. Python升级3.6 强力Django+Xadmin打造在线教育平台

    第 1 章 课程介绍 1-1 项目演示和课程介绍: 第 2 章 Windows下搭建开发环境 2-1 Pycharm.Navicat和Python解释器的安装: Pycharmhttp://www.j ...

  6. LAMP架构应用实战—Apache服务介绍与安装01

    LAMP架构应用实战—Apache服务介绍与安装01   一:Apache是什么 Apache是Apache基金会开发的一个高性能.功能强大.安全可靠.灵活的开放源码的WEB服务软件 二:Apache ...

  7. Node.js的require()的工作原理

    大多数人都知道Node.js中require()函数做什么的,但是有多少人知道它的工作原理呢?我们每天使用它加载库包和模块,但是它的内部行为原理很神秘. 我们追寻Node模块系统的核心: module ...

  8. 软工实践 - 第二十八次作业 Beta 冲刺(6/7)

    队名:起床一起肝活队 组长博客:https://www.cnblogs.com/dawnduck/p/10146478.html 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过 ...

  9. 关于MySQL的异常处理 Can't connect to MySQL server on localhost (10061)解决方法

    首先检查MySQL 服务没有启动>如果没有启动,则要启动这个服务. 昨天,重起服务器后出现MySQL 'localhost' (10061)错误,开始以为是因为数据库链接打开过多,数据库资源耗尽 ...

  10. WCF服务全局异常处理机制

    服务端增加WCF服务全局异常处理机制,任一WCF服务或接口方式出现异常,将统一调用WCF_ExceptionHandler.ProvideFault方法,因此不需要每个方法使用try catch写法. ...