5.1 实例演示一

学习目标:

通过一个简单完整的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 2020-11-10 18:55:39Z tommy $
* @package Controller
* @since 1.0
*/
namespace controllers;

use doitphp\core\Controller;

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 2020-11-10 23:04:17Z tommy $
* @package Model
* @since 1.0
*/
namespace models;

use doitphp\core\Model;

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。

:有种情况特殊,即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。