PHP框架CodeIgniter入门使用(2)

本文参考 链接 介绍CodeIgniter如何将Controller连接Model层(操作数据库),实现读取新闻条目功能。通过本文串通Controller和Model以及View之间如何协同,控制。

一,创建Model

有一点需要明确,关于数据库的操作在model层,而非Controller层,Controller只负责业务控制逻辑,从model里取数据然后送给view。phpmyadmin里:

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)
);
新建个表。注意text类型的选utf8编码,然后随便插入两条数据。

在models文件夹下新建News_model:

<?php

/**
 * Created by PhpStorm.
 * User: yanzi
 * Date: 15/10/22
 * Time: 下午6:38
 */
class News_model extends CI_Model{
    public function __construct(){
        $this->load->database();
    }

    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();
    }
}
注意上面result_array()是返回查询到所有的结果,row_array()是返回查询的当前那条结果。关于数据库的部分可以参考 链接

二新建Controller

News.php

<?php

/**
 * Created by PhpStorm.
 * User: yanzi
 * Date: 15/10/23
 * Time: 上午11:38
 */
class News extends CI_Controller {

    /**
     * News constructor.
     */
    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();
        $data['title'] = 'News archive';
        $this->load->view('templates/header', $data);
        $this->load->view('news/index', $data);
        $this->load->view('templates/footer');
    }

    /**
     * 显示某一个slug的新闻
     * @param null $slug
     */
    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');
    }

}
注意:

1,Controller如何加载Model?

在News的构造函数里通过load->model(''")里将model目录下对应名字的model加载进来,然后再使用时通过$this->news_model进行调用。

2,Model的名字是不区分大小写的,即真正的model可以大写,在load的时候可以写成小写。

3,Controller如何跟view层发生关系?

通过$this->load->view('')加载view文件夹下的文件,传递一个array。在Controller里的array的key,在view下就是对应的变量名字。关于传递数据这块可以参考 CI的模版解析类部分。

4,通过代码可以看到,News这个控制器加载了view/news文件夹下的index.php 和view.php

三,新建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; ?>
注意:此处用了site_url设置超链接,用意是地址栏里输入news/slug能直接跳转到news/view/slug,因此要设置路由。


view.php

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

四,修改routes.php

在原来基础上,增加以下两句:

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

五,配置数据库

在database.php里配置下数据库相关信息。

经过以上5步,一切ok。

浏览器输入:http://localhost/~yanzi/CodeIgniter/index.php/news



点击超链接后http://localhost/~yanzi/CodeIgniter/index.php/news/slug1111 转到以下:





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
压缩包里有两个文件: 1、CodeIgniter:php敏捷开发框架 2、CodeIgniter 1.7.1 用户指南 本书详细讲解了 CI 的一些主要特性。本书并不包含 CI 的所有内容和全部细节。CI 有一本出色的在线《用户指南》,它详细讲解了大多数的内容。它可以与 CI 一起下载。 本书并不想重复《用户指南》中的内容。相反,本书试图让你轻松了解 CI 框架是如何工作的,那么,你可以先决定它是否对你有价值,然后再阅读本书。 在试图解释 CI 是如何工作时,本书的某些内容已经超出了《用户指南》的范围。(《用户指南》更注重实际应用。)这意味着在“实战训练”中有一些非常理论化的章节。我发现这有助于理解 CI 内部的运行机制;否则,当你遇到令人费解的错误消息时就不容易解决。 我尝试在展示 CI 代码段时使用一个“真实世界”的例子。我想展示的是,CI 可以用于开发一个正式的网站。目前,我手头上有几个正在运行的客户网站,我希望依照我指定的方式去对其进行检测控制以及测试,同时记录下程序操作行为,在我需要时我可以得到一份相关的报告。 本书中的范例无法将 CI 的功能一丝不漏的完全展示,但我想这些范例应当还是在一定程度上展现了 CI 在简化处理常用应用(以及一些非常用应用)上的能力。 本书系统地讲解了 CodeIgniter 的主要特性,并配合相应的代码范例进行了详尽的解释,使你能够由浅入深地掌握 CodeIgniter

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值