非常教程

Codeigniter 3参考手册

用户指南:教程 | User guide: Tutorial

新闻栏目 | News section

在最后一节中,我们通过编写一个包含静态页面的类来研究框架的一些基本概念。我们通过添加自定义路由规则来清除URI。现在是引入动态内容并开始使用数据库的时候了。

设置你的模型

与其在控制器中直接写入数据库操作,不如将查询放在模型中,以便以后可以轻松地重用它们。模型是在数据库或其他数据存储中检索、插入和更新信息的地方。它们代表你的数据。

打开application / models /目录并创建一个名为News_model.php的新文件并添加以下代码。确保您已按照此处所述正确配置数据库。

<?php
class News_model extends CI_Model {

        public function __construct()
        {
                $this->load->database();
        }
}

此代码与前面使用的控制器代码类似。它通过扩展CI_Model并加载数据库库。这将使数据库类通过$this->db对象。

在查询数据库之前,必须创建一个数据库模式。连接到您的数据库并运行下面的SQL命令(MySQL)。还添加一些种子记录。

CREATE TABLE news (
        id int(11) NOT NULL AUTO_INCREMENT,
        title varchar(128) NOT NULL,
        slug varchar(128) NOT NULL,
        text text NOT NULL,
        PRIMARY KEY (id),
        KEY slug (slug)
);

现在已经建立了数据库和模型,您需要一种方法从我们的数据库中获取我们的所有帖子。为此,将使用CodeIgniter随附的数据库抽象层 - Query Builder。这使得可以编写一次'查询'并使它们在所有支持的数据库系统上工作。将以下代码添加到您的模型中。

public function get_news($slug = FALSE)
{
        if ($slug === FALSE)
        {
                $query = $this->db->get('news');
                return $query->result_array();
        }

        $query = $this->db->get_where('news', array('slug' => $slug));
        return $query->row_array();
}

有了这个代码,你可以执行两个不同的查询。你可以得到所有的新闻记录,或通过它的slu get获得一个新闻项目。您可能已经注意到该$slug变量在运行查询之前未被清理; 查询生成器为你做这件事。

显示新闻

现在查询已写好,模型应该与要向用户显示新闻项目的视图绑定。这可以在我们Pages之前创建的控制器中完成,但为了清晰起见,News定义了一个新的控制器。在application / controllers / News.php创建新的控制器。

<?php
class News extends CI_Controller {

        public function __construct()
        {
                parent::__construct();
                $this->load->model('news_model');
                $this->load->helper('url_helper');
        }

        public function index()
        {
                $data['news'] = $this->news_model->get_news();
        }

        public function view($slug = NULL)
        {
                $data['news_item'] = $this->news_model->get_news($slug);
        }
}

查看代码,您可能会看到与之前创建的文件有些相似之处。首先,该__construct()方法:它调用其父类(CI_Controller)的构造函数并加载模型,因此可以在此控制器中的所有其他方法中使用它。它还会加载一组URL Helper函数,因为我们稍后会在视图中使用它们中的一个。

接下来,有两种方法可以查看所有新闻项目,另一种方法用于查看特定新闻项目。你可以看到$slug变量在第二种方法中传递给模型的方法。模型使用这个片段来识别要返回的新闻项目。

现在,控制器通过我们的模型检索数据,但是还没有显示任何数据。接下来要做的事情是将这些数据传递给视图。

public function index()
{
        $data['news'] = $this->news_model->get_news();
        $data['title'] = 'News archive';

        $this->load->view('templates/header', $data);
        $this->load->view('news/index', $data);
        $this->load->view('templates/footer');
}

上面的代码从模型中获取所有新闻记录,并将其赋值给一个变量。标题的值也分配给$data['title']元素和所有数据传递给视图。现在您需要创建一个视图来呈现新闻项目。创造应用程序/视图/新闻/index.php并添加下一段代码。

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

<?php foreach ($news as $news_item): ?>

        <h3><?php echo $news_item['title']; ?></h3>
        <div class="main">
                <?php echo $news_item['text']; ?>
        </div>
        <p><a href="<?php echo site_url('news/'.$news_item['slug']); ?>">View article</a></p>

<?php endforeach; ?>

在这里,每个新闻项目被循环起来并显示给用户。您可以看到,我们用PHP编写了模板,并将其与HTML混合使用。如果您喜欢使用模板语言,可以使用CodeIgniter的模板分析器类或第三方解析器。

新闻概述页面现在已经完成,但是仍然没有显示单个新闻项目的页面。先前创建的模型是以这样的方式创建的,因此它可以很容易地用于此功能。您只需要向控制器添加一些代码并创建一个新视图。回到News控制器和更新view()有以下几点:

public function view($slug = NULL)
{
        $data['news_item'] = $this->news_model->get_news($slug);

        if (empty($data['news_item']))
        {
                show_404();
        }

        $data['title'] = $data['news_item']['title'];

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

而不是调用get_news()方法时,$slug变量被传递,因此它将返回特定的新闻项。唯一要做的事情是在application/view/news/view.php将以下代码放入此文件中。

<?php
echo '<h2>'.$news_item['title'].'</h2>';
echo $news_item['text'];

选路

由于之前创建的通配符路由规则,您需要额外的路由来查看您刚刚创建的控制器。修改你的路由文件(application / config / routes.php),使其如下所示。这确保请求到达News控制器而不是直接进入Pages控制器。第一行将URI与控制器中的view()方法连接起来News

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

将浏览器指向文档根目录,然后是index.php/news,然后查看新闻页面。

Codeigniter 3

CodeIgniter 是一个PHP MVC框架,特点是超轻量级、有数据加密、有灵活URI路由等。对于 PHP 程序员来说,它小巧但功能强大。

主页 https://codeigniter.com/
源码 https://github.com/bcit-ci/CodeIgniter
版本 3
发布版本 3.1.5