首页 > 编程 > PHP > 正文

PHP框架CodeIgniter入门使用(2)

2020-03-22 17:25:18
字体:
来源:转载
供稿:网友
  • 本文参考 链接 介绍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 */html' target='_blank'>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

    <h4><?php echo $title; ?></h4><?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

    <?phpecho '<h4>'.$news_item['title'].'</h4>';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 转到以下:

    PHP编程

    郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

  • 发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表