介绍
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; } }
它只是在从 news 表中检索传递了 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 这样的框架会迫使你自己定义所有这些库。