CodeIgniter:从简单示例开始
介绍
CodeIgniter是一个功能强大的 PHP 框架,可帮助您大大加快 Web 应用程序的开发速度。由于采用模块化方法加载库,因此性能占用空间很小,并且通过使用模型-视图-控制器 (MVC) 动态将逻辑与表示分离得非常好。
在本教程中,您将学习如何创建一个非常简单的应用程序来显示数据库中的内容。它并非旨在提供构建您自己的 CMS 的解决方案,而是说明如何使用 CodeIgniter。此外,它还试图将上一篇文章中学到的一些经验教训付诸实践,并假设您已经在开发环境中安装了 CodeIgniter,并按照第一个教程中的描述对其进行了配置。
计划
在本文中,您将了解如何使用 CodeIgniter 的一些类和函数来查询包含新闻项目的数据库表,并在页面上单独显示它们。为此,我们将创建一个控制器、一个模型和一个视图,以及用于保存信息的数据库(尽管后一部分也将假定,因为有许多资源可用于复习您的 MySQL 技能)。
数据库要求如下:一个名为 news 的表,其中包含 3 列:id(主列和自动递增列)、title 和 body。当然,您可以添加更多列,但这对于示例来说已经足够了。然后在表中创建几行,其中包含一些虚拟新闻项目。如果您不知道如何创建数据库,可以使用这个很棒的教程来帮助您创建数据库。此外,请确保您已将 CodeIgniter 配置为使用此数据库。
模型
现在我们已经正确设置了数据库,并且 CodeIgniter 也知道它,现在是时候创建一个 Model 类来查询它以获取信息了。导航到CodeIgniter 安装的application/models文件夹,并创建一个名为news_model.php的新 php 文件(您可以随意命名该文件)。在文件顶部添加一个 php 打开标记,并通过扩展默认 CI 类来创建 Model 类(请记住类名以大写字母开头):
class News_model extends CI_Model { }
在这个类中,您必须创建一个函数(称为方法)来查询数据库。CodeIgniter 使用 Active Record 模式,这使得使用数据库变得非常容易。您所要做的就是在构造函数中加载数据库类(如果您尚未在application/config文件夹下的autoload.php文件中自动加载它),然后就可以开始了。要加载它,请将以下函数粘贴到类中:
public function __construct() { $this->load->database(); }
这将使该类中的所有方法都能够使用数据库函数。接下来,您需要 Model 类中上述方法从数据库表中读取信息:
public function get_news($id) { if($id != FALSE) { $query = $this->db->get_where('news', array('id' => $id)); return $query->row_array(); } else { return FALSE; } }
它只是检查是否已将 ID 传递给它,然后从新闻表中检索带有传递的 ID 的行并将其作为包含表中所有列的关联数组返回。如果没有传递 ID,该函数将返回 FALSE。
这样就可以检索信息了。现在是时候处理客户端要求此信息的请求了。保存文件并退出。
控制器
导航到application/controllers文件夹并创建一个名为news.php的新 php 文件(此文件的名称必须与您要提供的类的名称相对应)。在文件中,再次打开 php 标记并通过扩展创建 Controller 类:
class News extends CI_Controller { }
现在是时候在这个类中处理请求并显示相关新闻了。所有繁重的工作都发生在 Model 类中,所以我们在这里要做的就是加载它并将其传递给我们想要显示的新闻的 ID 参数。因此,让我们创建一个名为show()的函数来处理这个问题:
public function show($id) { $this->load->model('news_model'); $news = $this->news_model->get_news($id); $data['title'] = $news['title']; $data['body'] = $news['body']; $this->load->view('news_article', $data); }
此方法的作用如下:第一行加载我们刚刚创建的news_model。第二行使用它并将查询结果(包含行中所有列的关联数组)存储在$news变量中。第三行和第四行将检索到的新闻的标题和正文存储在$data数组中,第五行加载我们想要用来显示它们的视图并传递信息。$data数组中的每个键都将代表一个要在视图文件中打印出来的变量。那么让我们看看如何构建它。
观点
导航到application/views文件夹并创建一个名为news_article.php的 php 文件(此文件必须与您在 Controller 中加载的文件同名。请注意,加载时无需包含 php 扩展名。)在此文件中复制以下几行:
<?php print $title; ?><?php print $body; ?>
如您所见,$title和$body变量通过$data数组从控制器传递到视图。您可以添加各种标记以任何您想要的方式显示页面,但对于我们的目的而言,标题的 H1 标签和正文的段落就足够了。保存文件并将浏览器指向您刚刚创建的控制器:
http://example.com/news/show/1
如果浏览器发出此请求,CodeIgniter 现在将查找名为news 的控制器(在名为news.php的 php 类文件中),调用其中名为show() 的方法,并将参数 1 传递给它。然后,此方法将加载 news_model ,该模型查询数据库并返回一条新闻,然后控制器将其传递给视图进行显示。非常简单且合乎逻辑。如果您访问http://example.com/news/show/2,它将显示 ID 等于 2 的那条新闻。
现在您已经拥有了它:一个基本但动态的应用程序,它查询数据库以获取信息并将其显示给客户端。现在您可能会问,为什么要使用 3 个文件以及所有这些函数和配置?当您构建复杂的应用程序时,这个问题的答案将显而易见,因为函数式编程变得难以管理,并且不使用像 CodeIgniter 这样的框架将迫使您自己定义所有这些库。