精华内容
下载资源
问答
  • 本文是CI框架学习笔记的第一篇,主要介绍了CI框架的环境安装,基本术语以及框架流程,非常的详细,有需要的朋友可以参考下
  • 最开始使用CI框架的时候,就打算写一个CI源码阅读的笔记系列,可惜虎头蛇尾,一直没有行动。最近项目少,总算是有了一些时间去写一些东西。于是准备将之前的一些笔记和经验记录下来,一方面权作备忘,另一方面时刻...
  • CI框架工作流程

    千次阅读 2016-05-28 14:33:43
    CI工作流程:  所有的入口都从根目录下的index.php进入,确定应用所在目录后,加载 codeigniter/CodeIgniter.php 文件,该文件会顺序加载以下文件执行整个流程。  index.php:检测文件路径,加载codeigniter...
    CI工作流程:
            所有的入口都从根目录下的index.php进入,确定应用所在目录后,加载 codeigniter/CodeIgniter.php 文件,该文件会顺序加载以下文件执行整个流程。

         index.php:检测文件路径,加载codeigniter.php文件

        codeigniter.php: 加载 Common/constants....文件。获取文件模式、设置计时器、实例化类(错误类、扩展类、钩子类、系统扩展、配置类、编码类、路由类、过程类、输出类、安全类、语言类、控制器)、加载请求方法、渲染输出view。
        
        CodeIgniter的一个类会保存为一个php文件,类名与文件名同名,它的核心应用类会在类名前加"CI_"。

        system/core/common.php:包含检测php版本、文件权限、加载核心类、获取配置参数、加载异常/错误类、获取http请求状态等公共函数

        application/config/constants.php:设置文件权限常量、应用程序宏定义文件

        system/core/Benchmark.php:用来记录执行时间

        system/core/Hooks.php:检测是否有钩子对象调用

        system/core/Config.php:为管理配置文件提供方法,检测application/config/config.php参数

    application/config/config.php:配置全局参数

        system/core/URI.php:解析url参数

        system/core/Router.php:检测路由配置,解析 HTTP 请求,以确定谁来处理

        system/core/Output.php:检查是否有缓存文件,如果存在则直接输出内容。

        system/core/Input.php:过滤 HTTP 请求和任何用户提交的数据

        system/core/Long.php:初始化提示语言变量

       system/core/conctroller.php:控制输出类

    引用自: 百度空间

    记录错误日志:

    默认程序不记录错误日志,如果有需要的话可以设置:

    1、在application/config/config.php中设置$config['log_threshold'] = 1/2/3/4,如果为0表示不输出错误日志,具体可查看里面的介绍;

    2、在需要写入错误的页面调用全局函数log_message('级别','消息'),级别有三个,一是error,即php运行错误,二是debug,系统调试,CI本身在很多页面也加了自己的系统debug,三是info,介绍运行中的一些消息,消息内容自己写;

    3、默认情况下错误日志存放在application/logs/log-[time].php中,它按日期存放文件,比如:log-2011-6-26表示存入今天的日志内容,一般情况下为了隐藏日志内容须将这个地址挪位,可以在$config['log_path']中设置路径,按要求最好是完整路径信息。

    设置自己的全局变量/配置:


    有时需要定义自己的全过程变量以供在其它地方使用,如自定义的session等,在CI中这项工作也很轻松。
    1、在application/config/中创建自己的config文件,注意存放文件位置。比如建立一个自己的配置文件mysetting.php,内容,$config['try'] = 'this is my trying';

    2、在需要调用自定义全局变量的地方使用$this->config->load('settingfile')函数,比如:
    $this->config->load('mysetting');
    如果有需要也可以通过application/config/autoload.php设置为自动加载。

    3、接下来在同一页面中使用$this->config->item('varname')函数,比如:$this->config->item('try');会输出:this is my trying;
    上面可以看出,CI中函数调用为:$this->filename的形式,也可以看出CI把整个系统看成一个大的类,然后通过加载、继承等方式获取相应方法。
    更多自定义变量参考: http://codeigniter.org.cn/user_guide/libraries/config.html

    隐藏index.php与加载外部文件:
    来自: 百度空间 ,有更改。
      
         其实不管是在用CI还是ZF都有同样一个问题,就是路径的问题。前期,我在用ZF做CMS时,我在.htaccess文件中设置了如遇到js,css,img等资源文件都不重定向。但今天在用CI时,却忘记了,弄了半天都没搞好,登陆CI的中国官方网,终于在论坛高手的帮助下把问题觖决了,在这里把它贴出来,供大家分享。

       首先,隐藏url中的index.php文件,这样访问其它目录的时候就不会有http://www.xxx.com/index.php/xxx的样式出现,面是直接http://www.xxx.com/xxx形式,在根目录.htaccess文件里设置(作用是隐藏index.php,有时index.php可能不在根目录,则htaccess须移到index.php所在目录),如下:

         RewriteEngine on    
         RewriteCond $1 !^(index\.php|images|js|css|robots\.txt)    #这里排除了images、js、css目录及index.php、robots.txt文件
         RewriteRule ^(.*)$ index.php/$1 [L]


        这里JS,CSS,IMG等资源文件夹与SYSTEM文件夹放在同一级下,独立放置的好处是不用受htaccess的限制,因为htaccess文件写明Deny from all,即拒绝访问。打开application/config/config.php改写配置:

         $config['base_url'] = "http://127.0.0.1/";
         $config['index_page'] = "index.php";


        如果, $config['base_url'] = "http://127.0.0.1";后面没加'/',则在model_rewrite最后一行应写 RewriteRule ^(.*)$ /index.php/$1 [L],在index.php前加一个'/'。 然后在JS文件夹中建立ajax.js文件,我在VIEW层中的文件为index.html。这样我要引入JS时,可以用CI自带的BASE_URL来设置,如下:

        在controllers里相关控制网页里添加(在其它load之前):

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

        在views表现的index.html里:

          <script type="text/javascript" src="http://sumsung753.blog.163.com/blog/<?=base_url().'js/ajax.js'?>"></script>     注:这里url是网站相对URL(好处是可以更改根目录后相对地址不用改变)

       这里js文件夹没有重定向,所以可以正常访问,而如果是受限制的页面则比较麻烦了。

    好了,CI中引入外部的JS与CSS就这么简单。

    注别的说明:“ RewriteCond $1 !^(index\.php|images|js|css|robots\.txt) ”这里代码的意思是:任意你想访问的资源都不被重定向时,都可写在这里。有时,网站没有加载CSS,JS(它的路径都是正确的)时,都是被重定向了,这要注意。

    具体可查看CI的中国官论坛 http://codeigniter.org.cn/user_guide/helpers/url_helper.html ,URL辅助函数一节,
    http://codeigniter.org.cn/user_guide/general/urls.html ,url设置,
    http://codeigniter.org.cn/forums/thread-4-1-2.html ,Hex关于隐藏index.php的说明,但他在model_rewrite用了index\\.php,我觉得用双反斜杠有误。

        (另外:特别谢谢CI中国官论坛上的Hex 与visvoy )

    数据间的传输:
    1、将数据从控制器传入视图
         由于控制器controllers在ci中扮演交通警察的角色,其是一个大类,而视图view作为controller类中的一个函数中的函数,所以view可以使用controller中的属性。所以可以这样写:
    Controller类Test
    class Test extends CI_Controller {
        public static $test2=''; //定义一个属性
        public function __construct(){
            parent::__construct();
            self::$test2 = $this->load->view('new','',true); //给$test2这个属性赋值
        }
        public function index()    {    
            $this->load->helper('url');            
            $this->load->view('anchor');    
        }
    }
    View.php
    <?php
    echo Test::$test2; //直接使用类中的值
    ?>
    这种直接使用controllers类中的值的方法虽然可行,却不是ci所提倡的。一般来说在controller中使用$this->load->view()的时候可以通过参数传值给view视图:
    function index()
    {
        $data['css'] = $this->css;
        $data['base'] = $this->base;
        $data['mytitle'] = 'Welcome to this site';
        $data['mytext'] = "Hello, $name, now we're getting dynamic!";
        $this->load->view('testview', $data); //$data通过参数传递到view
    }
    这里,把需要传递的数值加入至$data数组,ci在核心类中给自动使用extract()函数把数组“解压”出来,成为一个个变量。所以在view中可以直接这样使用变量:
    echo $css;

    2、模型与视图的交互
    在ci中模型总是用以处理数据,模型中数据处理也是通过controller中转到view,所以最好不要试图模型直接与视图联系。手册中有这样一个例子:
    class Blog_controller extends CI_Controller {
        function blog()    {
            $this->load->model('Blog'); //载入模型
            $data['query'] = $this->Blog->get_last_ten_entries(); //使用模型中的方法,将返回值存入$data数组
            $this->load->view('blog', $data); //像上例一样,通过参数传给视图view
        }
    }
    展开全文
  • 最近开发中遇到CI框架与ckeditor整合的相关问题,经过调查,实践整理出这份文档,文档中有详细的整合步骤以及自己写的实例代码。这份文档对那些想要了解CI中整合ckeditor的开发人员会起到很好的入门作用。
  • CI框架学习笔记第一天

    万次阅读 2017-04-30 09:13:19
    此文章为自己书写,在Word上做的笔记,然后...学习目标使用CI框架开发商城(前台和后台)。 CI简单介绍小巧,快速。 相对于学习其他框架,更容易掌握。 CI快速入门获取与安装: 在官网下载:http://codeigniter.org

    此文章为自己书写,在Word上做的笔记,然后拷贝到这上边的,无任何抄袭。另外若是程序有任何问题可以评论,也可私信我。
    若是想看整个学习笔记代码和数据库可点击此处(包含个人书写的项目代码及数据库文件)。

    学习目标

    使用CI框架开发商城(前台和后台)。
    

    CI简单介绍

    小巧,快速。
    相对于学习其他框架,更容易掌握。
    

    CI快速入门

    获取与安装:
    在官网下载:http://codeigniter.org.cn/
    将下载好的文件解压到工程目录下:
    这里写图片描述
    直接访问:http://localhost/citest/
    这里写图片描述
    看到此界面表示安装成功。
    定义自己的视图和控制器:
    这里写图片描述
    其中user_guide文件夹删除.
    重点关注application文件夹
    这里写图片描述
    控制器说白了就是一个类文件,并要继承CI_Controller,此时我们要借鉴ci自己提供的welcome.php文件。
    关于命名规范的问题,如果我们使用别人的框架,尽量要遵守别人制定的规范:
     类名的首字母应该大写,如果名称由多个词组成,词之间用下划线分开。
     类中所有其他方法的名字小写,多个单词之间用下划线。
     类文件名使用小写
    定义hello控制器,有一个方法,index
    访问:涉及到ci的url模式
    CI默认支持的url模式是pathinfo形式,也就是使用/隔开。
    例如:http://localhost/citest/index.php/hello/index
    其中http://localhost/citest/index.php/是固定的,代表入口文件,而后面的hello表示是控制器,index表示的是控制器中的方法。
    在控制器中必须加入这一句:
    defined(‘BASEPATH’) or exit(‘No direct script access allowed’);
    这句话的作用是:为了防止跨站攻击,直接通过访问文件路径用的
    这里写图片描述
    视图文件应该放在view目录下:
    这里写图片描述
    在控制器中调用视图。
    使用$this->load->view(“视图名”);即可。
    上面的操作只是简单的将html页面展示出来。而实际上是在控制器中经常获得数据传送到视图当中。使用load->view方法的第二个参数分配数据即可。
    这里写图片描述
    在视图中进行调用。
    这里写图片描述
    在CI框架中,模板语法是什么样的?CI使用的是原生的PHP语法,效率高。
    在视图中直接使用 title使 data[‘title’],需要注意,CI他使用了一个extract函数,将数组中变量导入当前符号表当中,所以直接使用键名作为变量名访问。

    必须清楚的几个概念

    框架开发和二次开发
    打个比方:买房子
    买二手房,直接拎包入住。好比是二次开发,dedecms、phpcms、echshop
    买新房,一开始不能住人,自己去买各种专修材料进行装修,才能入住。好比是框架开发,只提供了基础的功能。
    CI是框架,用于框架开发。
    MVC
    M:model模型,一般是直接操作数据库的
    V:view模型,一般是指模版文件,比如html页面,用于展示数据的
    C:controller,控制器,扮演了交通警察的身份,接受请求,然后调用相应的模型来完成工作,获取数据,最后分配到视图。
    CI框架也是一个MVC框架。使用CI框架开发时,大部分工作就是在MVC这部分。
    

    MVC完整案例

    使用mvc完成新闻的一组增删改查操作。
    书写一个news控制器。
    

    这里写图片描述
    CI操作数据库
    1、数据库相关配置,在config/database.php
    这里写图片描述

    2、连接数据库
    CI提供了专门的数据库操作类,有两种方式,只需要加载该类即可。
    手动载入:在需要使用数据库操作类的地方,使用$this->load->database()即可,比如在模型中载入。
    自动载入:在config下面的autoload.php的配置文件中,$autoload['libraries'] = array(‘database’);即可。
    

    这里写图片描述

    3、操作
    定义news模型
    定义Model时的书写规范:Model_name是模型类的名字。类名的首字母必须大写,其他字母小写。
    文件名是类名的小写版。
    

    这里写图片描述
    如何使用数据库操作类进行操作呢?
    当我们连接了数据库之后,可以使用 this>db this->db->query(sql语句);方法。
    如果直接使用query方法,是比较麻烦的。每次还得自己来拼凑sql语句,更希望有一个能够自动完成增删改查的功能的方法。CI中也提供了一个类叫做active record,也叫AR。最基础的一组操作如下:
    this>db>insert(); this->db->update();
    this>db>delete(); this->db->get();
    完成添加新闻
    在news_model中定义add_news方法完成添加操作。
    这里写图片描述
    在控制器中,接收表单提交的数据然后调用model里面的添加方法完成添加操作。
    先解决一个问题,在视图中表单的action的值该如何来写。
    这里写图片描述
    这里涉及到CI的辅助函数,
    配置base_url,如下:
    这里写图片描述
    默认情况下,url辅助函数是没有加载的,要使用,则需要加载,可以在配置文件中,配置自动加载,也可以在需要使用的地方手动加载。
    自动加载配置:
    这里写图片描述
    url辅助函数中,提供了base_url()和site_url()方法。
    其中,base_url的值是在config中配置的base_url的值,如http://localhost/citest/
    而site_url的值则是base_url+index_page,如http://localhost/citest/index.php
    所以,在视图中要定义控制器的某个动作(url),使用site_url
    这里写图片描述
    在控制器中定义insert方法完成插入操作
    这里写图片描述
    完成新闻的读取
    在news_model中定义一个方法来获取数据
    这里写图片描述
    在news控制器中定义一个方法index,调用模型中的方法获取新闻数据,然后将数据分配到视图。

    CI的执行流程

    思考题:
    1、默认的welcome页面是怎么显示的?
    2、 this3使 this->load怎么理解?
    CI是一个单入口的框架,所有的请求都需要经过index.php文件。
    大致的流程如下:
    这里写图片描述
    分析index.php文件
    这里写图片描述
    这里写图片描述
    这个和我们的文件夹结构名称一一对应,可以更改。如果更改了,只需要将在此处修改一下名称与文件夹名字相同即可。
    这里写图片描述
    这里写图片描述
    最后载入codeIgniter.php文件。
    这里写图片描述
    分析codeIgniter.php
    首先载入通用函数库。
    这里写图片描述
    载入配置文件(常量配置)
    这里写图片描述
    载入核心类
    初始化Benchmark类
    这里写图片描述
    初始化钩子类
    这里写图片描述
    初始化配置类
    这里写图片描述
    初始化字符编码类
    这里写图片描述
    初始化uri路径类
    这里写图片描述
    初始化路由类
    这里写图片描述
    初始化输出类
    这里写图片描述
    初始化安全类
    这里写图片描述
    初始化输入类
    这里写图片描述
    初始化语言包类
    这里写图片描述
    载入ci的总控制器
    这里写图片描述
    通过router对象$RTR的两个方法获取当前的类名和方法名
    这里写图片描述
    比如,输入的是http://localhost/citest/index/welcome/index,那么上述代码获取的 classwelcome, method就是index,一个是控制器,一个是方法名。如果没有方法名,则默认使用index方法。
    这里new了一个对象,叫做CI,这是CI框架中的超级对象。
    这里写图片描述
    new的时候做了些什么?
    分析CI_Controller.php
    采用单例模式创建controller对象。
    这里写图片描述
    这里写图片描述
    将前面载入的核心类,作为CI对象的属性。
    这里写图片描述
    然后载入Loader.php类。
    这里写图片描述
    在控制器中出现的 this this->load其实也是一个对象Loader对象。
    超级对象生成后,我们就可以使用超级对象提供的一系列方法完成我们的业务逻辑,如果要完成其他功能,可以载入其他的类文件,辅助函数,这些类文件和辅助函数包括CI已经提供好的,也可以是自己定义的。

    展开全文
  • ci框架基础详解(入门学习)

    千次阅读 2017-07-22 12:27:05
    1、ci框架介绍CodeIgniter 是为 PHP 开发人员提供的一套 Web 应用程序工具包。 它的目标是能够让你比从零开始更加快速的完成项目,它提供了一套 丰富的的类库来满足我们日常的任务需求,并且提供了一个简单的 接口和...

    1、ci框架介绍

    CodeIgniter 是为 PHP 开发人员提供的一套 Web 应用程序工具包。 它的目标是能够让你比从零开始更加快速的完成项目,它提供了一套 丰富的的类库来满足我们日常的任务需求,并且提供了一个简单的 接口和逻辑结构来调用这些库。CodeIgniter 通过最小化你需要的代码量, 让你把更多的精力放到项目的创造性开发上。

    CodeIgniter 通过 MIT 开源许可协议授权,你可以任意使用。阅读 许可协议 了解更多内容。

    CodeIgniter 使用了模型-视图-控制器 架构,它能很好的将逻辑层和表示层分离。 特别是对于那些使用了模板文件的项目来说更好,它能减少模板文件中的代码量。

    CodeIgniter 拥有全面的类库,能满足大多数 Web 开发任务的需要, 例如:访问数据库,发送邮件,验证表单数据,会话管理,处理图像, 处理 XML-RPC 数据

    2、流程介绍

    1. index.php 文件作为前端控制器,初始化运行 CodeIgniter 所需的基本资源;
    2. Router 检查 HTTP 请求,以确定如何处理该请求;
    3. 如果存在缓存文件,将直接输出到浏览器,不用走下面正常的系统流程;
    4. 在加载应用程序控制器之前,对 HTTP 请求以及任何用户提交的数据进行安全检查;
    5. 控制器加载模型、核心类库、辅助函数以及其他所有处理请求所需的资源;
    6. 最后一步,渲染视图并发送至浏览器,如果开启了缓存,视图被会先缓存起来用于 后续的请求。
      这里写图片描述

    3、MVC 模型-视图-控制器

    CodeIgniter 的开发基于 MVC(模型-视图-控制器)设计模式。MVC 是一种 用于将应用程序的逻辑层和表现层分离出来的软件方法。

    模型 代表你的数据结构。通常来说,模型类将包含帮助你对数据库进行增删改查的方法。
    视图 是要展现给用户的信息。一个视图通常就是一个网页。
    控制器 是模型、视图以及其他任何处理 HTTP 请求所必须的资源之间的中介,并生成网页。
    这里写图片描述

    4、ci安装

    (1)下载安装包:安装包下载
    或者百度一下官网下载
    因为我本机学习用wampserver,php文件我都放到了www目录下
    文件夹可以自己改名,这里改为seraph。
    (2)将 CodeIgniter 文件夹及里面的文件上传到服务器,通常 index.php 文件将位于网站的根目录;
    使用文本编辑器打开 application/config/config.php 文件设置你网站的根 URL,如果你想使用加密或会话,在这里设置上你的加密密钥;
    如果你打算使用数据库,打开 application/config/database.php 文件设置数据库参数。

    1.设置网站根目录

    [application]->[config]选择config.php 文件设置你网站的根 URL

    $config['base_url'] = 'localhost';//服务器的地址

    这里写图片描述

    2.设置数据库

    [application]->[config]选择database.PHP 文件设置数据库参数
    这里写图片描述

    3.隐藏system 和 application文件

    隐藏 CodeIgniter 的文件位置来增加安全性,你可以将 system 和 application 目录修改为其他的名字,然后打开主目录下的 index.php 文件将 systempath和application_folder 两个变量设置为你修改的名字

    $system_path = 'system';
    $application_folder = 'application';

    (3)运行服务器,并且在浏览器中运行http://localhost/seraph/

    这里写图片描述
    出现这个就成功了。

    4.初次运行

    1.打开PhpStorm,找到解压的seraph文件
    选中视图seraph->application->view->welcome_message.php
    这里写图片描述

    把里面的代码全改为

    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    ?><!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>hello CodeIgniter</title>
    </head>
    <body>
    <h1>hello world</h1>
    </body>
    </html>

    这样在浏览器打开刚才的页面就是hello。word了。

    5、页面跳转

    1.设置CI框架的初始控制器

    1. 当运行CI项目时,我们所看到的第一个页面是由controller转发的视图,而这个controller我们是在[application]->[config]->[routes.php]进行设置
    $route['default_controller'] = 'welcome'; 

    当前设置的页面是由welcome转发的视图。

    2. 创建两个页面

    (1)首先在[application]->[controllers]目录下创建Page2.php

    class Page2 extends CI_Controller {
    
        public function index()
        {
            $this->load->view('page2');
        }
    }

    (2)在[application]->[view]目录下创建Page2.PHP

    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    ?><!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>page2</title>
    </head>
    <body>
    
       <h1 >page2</h1>
    
    </body>
    </html>

    3.实现页面跳转

    (1)在[application]->[controllers]->[Welcome.php]
    添加代码$this->load->helper(‘url’);

    class Welcome extends CI_Controller {
    
        function Welcome(){
            parent::__construct();
    
            $this->load->helper('url');
        }
        public function index()
        {
            $this->load->view('welcome');
        }
    }

    (2)在[application]->[views]->[welcome.php]页面添加js代码

    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>第一个页面</title>
        <script type="text/javascript">
            function turnto(){
                var url = "<?php echo site_url('Page2')?>";
    
                window.location.href=url;
            }
        </script>
    
    </head>
    <body>
       <h1 onclick="turnto()">hello student</h1>
    </body>
    </html>

    跳转方法:
    site_url(): 获得url参数

    base_url() : application/config/config.php设置的路径

    redirect( ‘控制器名/方法名’ ): 跳转

    sit_url 和 base_url 区别:

    假如你config文件里面的base_url和index_page是这样定义的:

    
    config['base_url'] = "http://domain.com/";
    
    config['index_page'] = "index.php";

    那么你若使用site_url(“news/php/2”);则实际url为

    http://domain.com/index.php/news/php/2

    若使用base_url(“news/php/2”);则url为:

    http://domain.com/news/php2 

    6、数据读取

    前面讲解了ci中设置数据库,数据库操作都在model文件夹中。

    1.创建Model

    (1)在application/models创建SingerModels.php文件,在文件里面创建SingerModels类并且继承CI_Model

    <?php
    
    class SingerModel extends CI_Model
    {
    
        function SingerModel()
        {
            $this->load->database();
        }
    
        function getSinger()
        {
    
            $sql = 'SELECT * from singer';
            // 查询数据库
            $query = $this->db->query($sql);
            // $query=$this->db->get('singer');
            // 以数组形式返回查询结果
            return $query->result_array();
        }
    
    
        function insertSinger()
        {
            $sql = "insert into singer(name,introduce)values('king','123')";
            $query = $this->db->query($sql);
    
            echo $query;
        }
    
        function insertSinger2()
        {
            $data = array(
                'name' => "wwesdd",
                'introduce' => "33535y4erth"
            );
    
            $query = $this->db->insert('singer', $data);
    
            echo $query;
        }
    
        function updataSinger1()
        {
            $sql = "update singer set name = 'kinggg' where id=30";
            $query = $this->db->query($sql);
            echo $query;
        }
    
        function updataSinger2()
        {
            $this->db->set('name', 'field+1');
    
            $this->db->where('id', 30);
    
            $query=$this->db->update('singer');
    
            echo $query;
        }
    
        function deleteSinger1(){
            $sql = "delete from singer where id =30 ";
            $query = $this->db->query($sql);
            echo $query;
        }
    
    
        function deleteSinger2(){
           $this->db->where('id', 31);
           $query =$this->db->delete('singer');
            echo $query;
        }
    }
    ?>

    (2)控制器获得数据,并且传递参数给视图
    在application/controllers/添加相关的代码

    <?php 
    class Singer extends CI_Controller{   
        function Singer(){
            parent::__construct();
            $this->load->helper('url');
            $this->load->model('SingerModel');
        }
         function index(){
             //$this->SingerModel->deleteSinger2();
             $singers = $this->SingerModel->getSinger();
             $data['singers'] = $singers;
             $this->load->view('singer',$data);
    
        }
    }
    ?>

    (3)视图显示数据
    在views中相应的文件

    <?php 
    
            $imageUrl = base_url()."images/";
            foreach ($singers as $singer){
                //echo "<p>".$singer['name']."的介绍是</p>";
                $url = $imageUrl.$singer['singer_icon_url'];
                $name = $singer['name'];
                $introduce = $singer['introduce'];
    
                echo "<tr><td><img id='image' src='".$url."'></td><td><div id='infor'>".$singer['name']."</div></td></tr>";
            }
    
            ?>

    7、ci中ajax的运用

    1.views前端页面添加ajax请求

    创建ajax发出请求

        var name ='好哈哈4444555aaaaa';
        var url = '<?php echo site_url('Ajax/getAjaxData')?>';
    
        $.ajax({
            data:{name:name},       //要发送的数据
            type:"POST",           //发送的方式
            url:url, //url地址
            error:function(msg){ //处理出错的信息
    
            },
            success:function(msg){  //处理正确时的信息
                alert( msg)
    
            }
        });

    2.在controllers里面创建接受方法

    function getAjaxData(){
            $name = $this->input->get_post('name');
        echo $name."呵呵呵呵呵";
        }

    8、图片上传

    1.前端表单

    <?php echo form_open_multipart('upload/do_upload');?>
    <input type="file" name="userfile" size="20" />
        <br />
        <input type="submit" value="upload" />
        </form>

    2.后台接收图片

        public function do_upload()
        {
         $config['upload_path']   = './uploads/'; //图片存放路径
         $config['allowed_types'] = 'gif|jpg|png';//图片类型
         $config['max_size']      = 100;          //图片大小
         $config['max_width']     = 2000;         //图片宽度
         $config['max_height']    = 2000;         //图片高度
         $config['file_name']     = time();       //图片名字
    
      $this->load->library('upload', $config);
    
      if ( ! $this->upload->do_upload('userfile'))
         {
            echo $this->upload->display_errors();
         }
         else
         {
            echo "成功!";           
         }
     }

    9、获得url中参数

    1,get参数获取

    (1)请求的参数是

    http://127.0.0.1/ci/index.php/Page2

    控制器是Page2.
    使用data=this->uri->segment(1);
    $data值是Page2
    (2)请求的参数是

    http://127.0.0.1/ci/index.php/Page2/getId/id/2 

    控制器是Page2.

         // $data=getId,getId控制器Page2里面的方法
           使用$data=$this->uri->segment(2);
         // $data=id,id是请求的参数键
           使用$data=$this->uri->segment(3);

    2.post参数获取

    $name = $this->input->get_post('name');
    展开全文
  • CI框架支持service层

    千次阅读 2017-03-30 16:17:46
    大家知道CodeIgniter框架式MVC分层的,通常大家把业务逻辑写到Controller中,而Model只负责和数据库打交道。 但是随着业务越来越复杂,controller越来越臃肿,举一个简单的例子,比如说用户下订单,这必然会有一...

    大家知道CodeIgniter框架式MVC分层的,通常大家把业务逻辑写到Controller中,而Model只负责和数据库打交道。

    但是随着业务越来越复杂,controller越来越臃肿,举一个简单的例子,比如说用户下订单,这必然会有一系列的操作:更新购物车、添加订单记录、会员添加积分等等,且下订单的过程可能在多种场景出现,如果这样的代码放controller中则很臃肿难以复用,如果放model会让持久层和业务层耦合。现在公司的项目就是,很多人将一些业务逻辑写到model中去了,model中又调其它model,也就是业务层和持久层相互耦合。这是极其不合理的,会让model难以维护,且方法难以复用。

    是不是可以考虑在controller和model中加一个业务层service,由它来负责业务逻辑,封装好的调用接口可以被controller复用。

    这样各层的任务就明确了:
    Model(DAO):数据持久层的工作,对数据库的操作都封装在这。
    Service : 业务逻辑层,负责业务模块的逻辑应用设计,controller中就可以调用service的接口实现业务逻辑处理,提高了通用的业务逻辑的复用性,设计到具体业务实现会调用Model的接口。
    Controller :控制层,负责具体业务流程控制,这里调用service层,将数据返回到视图
    View : 负责前端页面展示,与Controller紧密联系。

    基于上面描述,实现过程:
    (1)让CI能够加载service,service目录放在application下,因为CI系统没有service,则在application/core下新建扩展MY_Service.php


    1. <?php
    2.  
    3. class MY_Service
    4. {
    5. public function __construct()
    6. {
    7. log_message('debug', "Service Class Initialized");
    8. }
    9. function __get($key)
    10. {
    11. $CI = & get_instance();
    12. return $CI->$key;
    13. }
    14. }

    (2)扩展CI_Loader实现,加载service,在application/core下新建MY_Loader.php文件:


    1. <?php
    2.  
    3. class MY_Loader extends CI_Loader
    4. {
    5. /**
    6. * List of loaded sercices
    7. *
    8. * @var array
    9. * @access protected
    10. */
    11. protected $_ci_services = array();
    12. /**
    13. * List of paths to load sercices from
    14. *
    15. * @var array
    16. * @access protected
    17. */
    18. protected $_ci_service_paths = array();
    19. /**
    20. * Constructor
    21. *
    22. * Set the path to the Service files
    23. */
    24. public function __construct()
    25. {
    26. parent::__construct();
    27. load_class('Service','core');
    28. $this->_ci_service_paths = array(APPPATH);
    29. }
    30. /**
    31. * Service Loader
    32. *
    33. * This function lets users load and instantiate classes.
    34. * It is designed to be called from a user's app controllers.
    35. *
    36. * @param string the name of the class
    37. * @param mixed the optional parameters
    38. * @param string an optional object name
    39. * @return void
    40. */
    41. public function service($service = '', $params = NULL, $object_name = NULL)
    42. {
    43. if(is_array($service))
    44. {
    45. foreach($service as $class)
    46. {
    47. $this->service($class, $params);
    48. }
    49. return;
    50. }
    51. if($service == '' or isset($this->_ci_services[$service])) {
    52. return FALSE;
    53. }
    54. if(! is_null($params) && ! is_array($params)) {
    55. $params = NULL;
    56. }
    57. $subdir = '';
    58.  
    59. // Is the service in a sub-folder? If so, parse out the filename and path.
    60. if (($last_slash = strrpos($service, '/')) !== FALSE)
    61. {
    62. // The path is in front of the last slash
    63. $subdir = substr($service, 0, $last_slash + 1);
    64.  
    65. // And the service name behind it
    66. $service = substr($service, $last_slash + 1);
    67. }
    68. foreach($this->_ci_service_paths as $path)
    69. {
    70. $filepath = $path .'service/'.$subdir.$service.'.php';
    71. if ( ! file_exists($filepath))
    72. {
    73. continue;
    74. }
    75. include_once($filepath);
    76. $service = strtolower($service);
    77.  
    78. if (empty($object_name))
    79. {
    80. $object_name = $service;
    81. }
    82. $service = ucfirst($service);
    83. $CI = &get_instance();
    84. if($params !== NULL)
    85. {
    86. $CI->$object_name = new $service($params);
    87. }
    88. else
    89. {
    90. $CI->$object_name = new $service();
    91. }
    92. $this->_ci_services[] = $object_name;
    93. return;
    94. }
    95. }
    96. }

    (3)简单例子实现:
    控制器中调用service :


    1. <?php
    2.  
    3. class User extends CI_Controller
    4. {
    5. public function __construct()
    6. {
    7. parent::__construct();
    8. $this->load->service('user_service');
    9. }
    10. public function login()
    11. {
    12. $name = 'phpddt.com';
    13. $psw = 'password';
    14. print_r($this->user_service->login($name, $psw));
    15. }
    16. }

    service中调用model :


    1. <?php
    2.  
    3. class User_service extends MY_Service
    4. {
    5. public function __construct()
    6. {
    7. parent::__construct();
    8. $this->load->model('user_model');
    9. }
    10. public function login($name, $password)
    11. {
    12. $user = $this->user_model->get_user_by_where($name, $password);
    13. //.....
    14. //.....
    15. //.....
    16. return $user;
    17. }
    18. }

    model中你只跟db打交道:


    1. <?php
    2.  
    3. class User_model extends CI_Model
    4. {
    5. public function __construct()
    6. {
    7. parent::__construct();
    8. }
    9. public function get_user_by_where($name, $password)
    10. {
    11. //$this->db
    12. //......
    13. //......
    14. return array('id' => 1, 'name' => 'mckee');
    15. }
    16. }
    17.  

      转载请注明地址:  http://www.phpddt.com/php/ci-service.html  尊重他人劳动成果就是尊重自己! 
    展开全文
  • CodeIgniter.php文件被称为BOOTSTRAP,也就是引导文件,这里也就是CI框架的核心了。其实把CodeIgniter.php这个文件的代码运行一次,就是整个CI应用都完成了一次完整的运作流程了。其中会加载一些组件,引入很多外部...
  • CI/CD流程

    千次阅读 2019-05-26 23:25:47
    CI/CD实践 在gitlab上定义WebHooc事件,若发生push到GitLab操作,则触发Jenkins的Job Jenkins从GitLab拉取代码,静态分析,启动服务,单元测试,构建镜像,推送到Docker仓库:Harbor仓库等动作 docker build docker...
  • CI框架工作原理浅析

    千次阅读 2019-01-15 11:06:04
    CI是一个流行的的PHP框架,小巧但功能强大,简洁轻量同时具有很强的扩展性。 另一方面,CI却没有...CI的工作流程图 index.php 文件作为前端控制器,初始化运行 CodeIgniter 所需的基本资源; Router 检...
  •  * @param type $onlyMain 是否只将日志记入主流程  */  public function write_log($level, $msg, $onlyMain = false) {  $level = strtoupper($level);  if ($this->_enabled === FALSE)...
  • CI框框架架学学习习笔笔记记 二二 -入入口口文文件件index.php 本文介绍的是CI框架的入口文件index.php的相关资料,需要的朋友可以参考下 上一节 CI框架学习笔记 一 - 环境安 基本术语和框架流程中我们提到了CI框架的...
  • CI框架浅析(全篇)

    千次阅读 2017-05-24 22:50:16
    使用CI框架开发了一段时间,发现它容易上手,使用起来也方便,最重要是很轻便,这引起我的兴趣去分析该框架的设计。这是国外开源的项目,有一段时间特别的火,下面让我们来看看呗。
  • 1. 指定 CodeIgniter 框架所在目录; 2. 定义 APPPATH 常量,指示应用程序文件根目录; 3. 载入 codeigniter/CodeIgniter.php 文件,启动框架。 codeigniter/CodeIgniter.php 文件这个文件是 CodeIgniter 的基本...
  • php的ci框架从入门到精通

    千次阅读 2017-04-01 10:26:12
    一个应用程序框架 。免费的、轻量、快速、功能强大 。基于M-V-C模型 。生成干净的URL( 便于优化 ) 。扩展性强 。不需要模板引擎( 目标是性能最大化,选择不适用模板引擎 ) 。拥有一个友好的中文用户社区 MVC...
  • CI框架学习笔记(一)

    千次阅读 2016-04-20 10:55:01
    辅助函数没有使用面向对象的方式来实现,他们是简单的过程式函数,CI默认不会自己加载辅助函数,一旦加载就可以在控制器和视图中全局访问。 一般辅助函数位于system/helpers或者application/helpers目录。加载辅助...
  • CI3框架初识-钩子

    千次阅读 2017-02-15 14:16:01
    今日花了半天看完ci框架手册,对比其他框架,有所心得:  1.概念上的对比  1.1 CI的钩子(hook),其实就是类似于laravel,shopex等框架的中间件,只是可以通过挂钩点的概念实现过滤在何处实现。如下:   ...
  • 最开始使用CI框架的时候,就打算写一个CI源码阅读的笔记系列,可惜虎头蛇尾,一直没有行动。最近项目少,总算是有了一些时间去写一些东西。于是准备将之前的一些笔记和经验记录下来,一方面权作备忘,另一方面时刻...
  • 本篇并不是对某一组件的详细源码分析,而只是简单的跟踪了下CI框架的autoload的基本流程。因此,可以看做是Loader组件的分析前提。  CI框架中,允许你配置autoload数组,这样,在你的应用程序初始化时,会自动加载...
  • CI框架的配置和MVC的简单介绍

    千次阅读 2017-04-17 22:21:05
    如若测试CI框架是否安装成功,在地址栏中输入location/项目名,如果能够显示“Welcome to CodeIgniter!”,就说明已经安装成功了。 ①application是项目的工程目录,我们自己编写的代码需要放在这个文件夹中。...
  • CI框架源码解析一之入口文件index.php

    千次阅读 2016-10-14 15:50:19
    Index.php作为CI框架的入口文件,源码分析,自然而然由此开始。在源码分析的过程中,我们并不会逐行进行解释,而只解释核心的功能和实现。在博主看来CI框架的index.php文件一共完成了四项工作: ① 设置框架...
  • CI框架可以实现在不修改系统核心文件的基础上来改变或增加系统的核心运行功能(如重写缓存、输出等),那就是Hooks,主要作用是CI框架下扩展base_system,它的主要作用是在CI启动时运行一些开发者定义的一些方法,来...
  • CI框架 简介

    千次阅读 2014-08-07 22:37:08
    CI工作流程:  所有的入口都从根目录下的index.php进入,确定应用所在目录后,加载 codeigniter/CodeIgniter.php 文件,该文件会顺序加载以下文件执行整个流程。  index.php:检测文件路径,加载codeigniter....
  • GitLab CI/CD 的执行流程

    千次阅读 2019-02-21 14:23:16
    GitLab CI/CD 是一个简洁好用的的持续集成/持续交付的框架。通过为你的项目配置一个或者多个 GitLab Runner,然后撰写一个 .gitlab-ci.yml,你就可以很方便地利用 GitLab CI/CD 来为你的项目引入持续集成/交付的功能...
  • 总结: 当你使用定义一个控制器时...view(' viewName ' , $data) 后,框架去调用loader装载器对象的view方法,这个方法会把你的$data数组使用extract函数把数组元素提取出来,变成变量名和变量值的形式,这也就是...
  • CI框架执行流程深入分析

    千次阅读 2014-07-31 23:49:42
    1、在讲解文件所在目录方面的问题时: application |-----core |-----MY_Controller.php system |-----core ...一、目前在企业中使用比较多的框架有如下几种: ...1、zendframework框架:此
  • Linux I2C驱动框架(超详细)

    万次阅读 多人点赞 2019-06-07 17:04:26
    Linux I2C驱动框架 一、总览全局 在讨论I2C驱动框架前,先讨论几个重要的概念 1、I2C总线 struct bus_type i2c_bus_type = { .name = "i2c", .match = i2c_device_match, .probe = i2c_device_probe, .remove...
  • 本篇博文将讲述CI框架Router路由类文件,CI框架Router路由类将URI映射到对应的控制器及方法,Router类大量代码处理的是自定义路由,该类要支撑以下几个功能点: ① 自定义路由规则  在 application/...
  • 今天开始,我将在这里连载由我自己编写的《CodeIgniter框架入门教程》,首先,这篇教程的读着应该是有PHP基础的编程人员,如果你是PHP初学者,建议你先学习基础的PHP技术(包括:变量、选择、判断、循环、数组、...
  • CI工作流程: 所有的入口都从根目录下的index.php进入,确定应用所在目录后,加载 codeigniter/CodeIgniter.php 文件,该文件会顺序加载以下文件执行整个流程。 index.php:检测文件路径,加载codeigniter.php...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 120,533
精华内容 48,213
热门标签
关键字:

Ci框架流程