实例演示一

学习目标

通过一个简单完整的MVC实例,了解控制器文件(Controller)、模型文件(Model)、视图文件(View)的所在的目录路径。更好地理解DoitPHP框架的开发规则。

创建数据表

DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `user_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `user_name` varchar(16) NOT NULL,
  `user_age` tinyint(3) unsigned NOT NULL,
  `user_note` text NOT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

INSERT INTO `users` VALUES ('1', '刘川枫', '24', '一个篮球队员');
INSERT INTO `users` VALUES ('2', '孙正义', '35', '一个普通人');

在mysql数据库中执行上面脚本,创建实例所需的数据表。然后在DoitPHP项目主配置文件(application.php)设置好数据库连接参数。

新建开发文件

利用DoitPHP Tools来创建控制器文件(Controller)、模型文件(Model)、视图文件(View)。

1、Controller文件路径:application/controllers/IndexController.php, 内容为:

/**
 * DoitPHP 演示实例一
 *
 * @author tommy
 * @copyright Copyright (C) www.doitphp.com All rights reserved.
 * @version $Id: Index.php 1.0 2013-11-29 18:55:39Z tommy $
 * @package Controller
 * @since 1.0
 */

class IndexController extends Controller {

    /**
     * 首页
     *
     * @access public
     * @return void
     */
    public function indexAction() {

	   $userModel = $this->model('users');
	   $userList  = $userModel->findAll();

	   $this->assign('list', $userList);

	   $this->display();       
    }

}

2、Model文件路径:application/models/usersModel.php,内容为:

/**
 * 用户信息操作(演示实例)
 *
 * @author tommy
 * @copyright Copyright (C) www.doitphp.com 2016 All rights reserved.
 * @version $Id: usersModel.php 1.0 2016-12-22 23:04:17Z tommy $
 * @package Model
 * @since 1.0
 */

class usersModel extends Model {

    /**
     * 定义数据表主键
     *
     * @access protected
     * @return array
     */
    protected function primaryKey() {
        return 'user_id';
    }

    /**
     * 定义数据表字段信息
     *
     * @access protected
     * @return array
     */
    protected function tableFields() {
        return array('user_id', 'user_name', 'user_age', 'user_note');
    }

    /**
     * 定义数据表名称
     *
     * @access protected
     * @return array
     */
    protected function tableName() {
        return 'users';
    }

}

3、视图文件路径为:application/views/index/index.php(视图文件为php), 内容为:

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title>DoitPHP管理后台</title>
</head>

<body>

<table>
    <thead>
        <tr>
            <td>会员ID</td>
            <td>会员名称</td>
            <td>年龄</td>
            <td>备注</td>
        </tr>
    </thead>
    <tbody>
    <?php if(is_array($list)){ foreach($list as $rows){ ?>
        <tr>
            <td><?php echo $rows['user_id']; ?></td>
            <td><?php echo $rows['user_name']; ?></td>
            <td><?php echo $rows['user_age']; ?></td>
            <td><?php echo $rows['user_note']; ?></td>
        </tr>
    <?php } } ?>
    </tbody>
</table>
</body>
</html>

4、运行:在浏览器地址栏里访问DoitPHP项目的入口文件。此时这里的实例网址为:localhost/demo/index.php。效果如下:

访问页面时若看到上图数据,说明运行是成功的。

视图文件路径的分析

DoitPHP框架所调用的视图文件路径,是根据当前所运行的Controller文件及其Action类方法所决定的。因为视图文件路径默认规则如下:
1、视图文件必须放置于视图目录(application/views)之下的子目录中。
2、子目录名为当前的Controller名称(开发规则:目录统一使用小写字母)。
3、视图文件名为当前Action类方法名字(不包含视图扩展名)。
例如:当前访问网址为:/index.php/member/list,由此网址可以分析出,当前Controller名为:member,当前Action类方法名为:list。所以访问此网址时,默认调用的视图文件路径为:application/views/memeber/list.php(姑且以为视图文件格式为php)。

:有种情况特殊,即Controller命名中含有下划线("_"),由于DoitPHP框架的自动加载规则部分采用PSR-0协议。命名中的下划线在Controller文件的自动加载时,则认为是目录分割符。即文件存放于controllers目录的子目录里。举个例子:当前访问网址为:/index.php/vip_member/list,由此网址分析,当前Controller名为:vip_member,当前Action类方法名为:list。由于Controller命名中含有下划线,所以Controller文件的路径为:application/controllers/vip/MemberController.php。这种目录设计为的是便于文件管理,可以将与vip相关的Controller文件统一放在控制器目录(controllers)的子目录vip里。同样,为了便于对这些与vip相关的Controller文件所对应的所有视图文件的管理,也是统一放在视图目录(views)的子目录(vip)中,然后再依照上面的规则存放视图文件,视图文件路径比普通情况下的视图文件路径多一级子目录。视图子目录为:member(与控制器文件MemberController.php相对应,遵循PSR-0协议),视图文件名为list.php(和上面视图路径规则一样)。这样视图文件路径为:application/views/vip/member/list.php。