CodeIgniter框架官网手册-阅读笔记(1)

ci框架手册来自:CodeIgniter中国官方手册

+++++++++++++++++++++++++++++++++++++

 

教程 - 内容提要:

  --创建一个简单新闻系统

  --教程主要介绍以下技术要点:

    1、模型 - 视图 - 控制器(Model - View - Controller)基础知识

    2、URI路由基础

    3、表单验证

    4、使用“查询构造器”执行基本的数据库操作

  

  整个教程会被分拆成多个章节,每个章节会介绍涉及到CodeIgniter的不同功能点:

    1、加载静态内容:此节主要介绍控制器(Controllers),视图(Views)和路由(Routing)的基础知识;

    2、读取新闻条目:此节开始介绍模型(Models)的相关知识,以及在模型中执行一些基本的数据库操作;

    3、创建新闻条目:此节主要介绍在CodeIgniter中执行高级数据库操作,以及表单验证的相关知识;

加载静态内容:

  Note:这篇教程假设你已经下载好CodeIgniter,并将其安装到你的开发环境;

  你要做的第一件事情是新建一个控制器来处理静态页面,控制器就是一个简单的类,用来完成你的工作,它是你整个web应用程序的"粘合剂";

  例如,当访问下面这个URL时:

    http://example.com/news/latest/10

  通过这个URL我们就可以推测出来,有一个叫做“news”的控制器,被调用的方法为“latest”,这个方法的作用应该是查询10条新闻条目并显示在页面上。在MVC模式里,你会经常看到下面格式的URL:

    http://example.com/[controller-class]/[controller-method]/[arguments]

  在正式环境下URL的格式可能会更复杂,但是现在,我们只需要关心这些就够了;

  新建一个文件application/controllers/Pages.php,然后添加如下代码:

  <?php

    class Pages extends CI_Controller{

      public function view($page = 'home'){

      }

    }

  ?>

  你刚刚创建了一个Pages类,有一个方法view并可接受一个$page参数。Pages类继承自CI_Controller类,这意味着它可以访问CI_Controller类(system/core/Controller.php)中定义的方法和变量;

  控制器将会成为你的Web应用程序中的处理请求的核心,在关于CodeIgniter的技术讨论中,这有时候被称为超级对象。和其他的PHP类一样,可以在你的控制器中使用$this来访问它,通过$this你就可以加载类库、视图、以及针对框架的一般性操作;

  现在,你已经创建了你的第一个方法,是时候创建一些基本的页面模板了,我们将新建两个视图(页面模板)分别作为我们的页脚和页头;

  新建页头文件application/views/templates/header.php并添加以下代码:

    <html>

      <head>

        <title>CodeIgniter Tutorial</title>

      </head>

      <body>

        <h1><?php echo $title; ?></h1>

   页头包含了一些基本的HTML代码,用于显示页面的主视图之前的内容。另外,它还打印出了$title变量,这个我们后面讲控制器的时候再讲。现在,再新建个页脚文件application/views/templates/footer.php,然后添加以下代码:

        <em>&copy; 2015</em>

      </body>

    </html>

在控制器中添加逻辑:

  你刚刚新建了一个控制器,里面有一个view()方法,这个方法接受一个参数用于指定要加载的页面,静态页面模板位于application/views/pages/目录。

  在该目录中,再新建两个文件home.php和about.php,在每个文件里随便写点东西然后保存他们。如果你没有什么好写的,就写“Hello World!”吧。

    为了加载这些页面,你需要先检查下请求的页面是否存在:

    public function view($page = 'home'){

      if( !file_exists(APPPATH.'views/pages/'.$page.'.php')){

         //Whoops, we don't have a page for that!

        show_404();

      }

      $data['title'] = ucfirst($page); //Capitalize the first letter

 

      $this -> load -> view('templates/header',$data);

      $this -> load -> view('pages/'.$page,$data);

      $this -> load -> view('templates/footer',$data);

    }

  当请求的页面存在,将包括页面和页脚一起被加载并显示给用户,如果不存在,会显示一个“404 Page not found”错误。

  第一行检查页面是否存在,file_exists()是个原生的PHP函数,用于检查某个文件是否存在,show_404()是个CodeIgniter内置的函数,用来显示一个默认的错误页面。

  在页头文件中,$title 变量用来自定义页面的标题,它是在这个方法中赋值的,但是注意的是并不是直接赋值给title 变量,而是赋值给一个&data数组的title元素。

  最后要做的是按顺序加载所需的视图,view()方法的第二个参数用于向视图传递参数,$data数组中的每一项将被赋值给一个变量,这个变量的名字就是数组的键值。所以控制器中$data['title']的值,就等于视图中的$title的值。

路由:

  控制器现在开始工作了!在你的浏览器中输入[your-site-url]index.php/pages/view来查看你的页面。当你访问index.php/pages/view/about时你将看到about页面,包括页头和页脚。

  使用自定义的路由规则,你可以将任意的URI映射到任意的控制器和方法上,从而打破默认的规则:

  http://example.com/[controller-class]/[controller-method]/[arguments]

  让我们来试试。打开文件application/config/routes.php然后添加如下两行代码,并删除掉其他对$route数组赋值的代码。

  $route['default_controller'] = 'pages/view';

  $route['(:any)'] = 'pages/view/$1';

  CodeIgniter 从上到下读取路由规则并将请求映射到第一个匹配的规则,每一个规则都是一个正则表达式(左侧)映射到一个控制器和方法(右侧)。当有请求到来时,CodeIgniter 首先查找能匹配的第一条规则,然后调用相应的控制器和方法,可能还带有参数。

 

  这里,第二条规则中$routes数组使用了通配符(:any) 可以匹配所有的请求,然后将参数传递给Pages类的view()方法。

  现在访问index.php/about 。路由规则是不是正确的将你带到了控制器的view()方法?实在是太棒了!

  

   

 

posted @ 2017-10-03 13:50  一纸流年  阅读(496)  评论(0编辑  收藏  举报