博主信息
博文 42
粉丝 2
评论 0
访问量 64649
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
MVC原理 ThinkPhp51安装与运行(MVC原理及分析 TP51 用composer下载与安装 运行简单案例)2019年3月19日
小明的博客
原创
938人浏览过

一、MVC的基本思路

  • MVC的简介

        Model:模型层,简单说就是数据库

        View:视图层,模版,简单说就是html+php的混编文件

        Controller:控制器,将模型的数据传给合适的视图将其显示出来

  • 运行小案例

        

实例

<?php
/** M: model 模型, 数据库
* V: view 视图, 模板(实质是一个html+php混编的文件)
* C: controller 控制器,根据模型要求选择合适的视图将期输出*/
//model
$data = [
    ['id'=>1, 'name'=>'老王','age'=>30, 'email'=>'lw@php.cn'],
    ['id'=>2, 'name'=>'老李','age'=>35, 'email'=>'ll@php.cn'],
    ['id'=>3, 'name'=>'老马','age'=>40, 'email'=>'lm@php.cn'],
    ['id'=>4, 'name'=>'老朱','age'=>45, 'email'=>'lz@php.cn'],
    ['id'=>5, 'name'=>'老韩','age'=>50, 'email'=>'lh@php.cn'],
];
?>
<!-- view曾  混排 -->
<!doctype html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>mvc</title>
</head>
<body>
    <table border="1" cellpadding="5" cellspacing="0" width="60%">
        <caption>员工信息表</caption>
        <tr bgcolor="#90ee90">
            <th>id</th>
            <th>name</th>
            <th>age</th>
            <th>email</th>
        </tr>
        <?php foreach ($data as $staff) :?>
            <tr align="center">
                <td><?=$staff['id']?></td>
                <td><?=$staff['name']?></td>
                <td><?=$staff['age']?></td>
                <td><?=$staff['email']?></td>
            </tr>
        <?php endforeach;?>

    </table>
</body>
</html>
<!--
MVC中的C呢: 其实C就是当前脚本mvc.php,控制器的功能就是根据模型数据的要求,选择合适的视图将它展现出来
显然不能通过一个脚本完成所有的功能,软件得分模块设计开发,但最终都是由一个个具体的类中的方法来完成操作
mvc框架的起点: 就是将用户的URL请求,转发到应用程序员的类方法上
在本例中, 就是如果将用户的url请求,映射到一个具体操作上
下面我们用实例来演示一个框架的运行原理
-->

运行实例 »

点击 "运行实例" 按钮查看在线实例

还有一个实例,模仿框架,分别写出MVC三个文件,还有入口文件


Model:

<?php
$data = [
    ['id'=>1, 'name'=>'老王','age'=>30, 'email'=>'lw@php.cn'],
    ['id'=>2, 'name'=>'老李','age'=>35, 'email'=>'ll@php.cn'],
    ['id'=>3, 'name'=>'老马','age'=>40, 'email'=>'lm@php.cn'],
    ['id'=>4, 'name'=>'老朱','age'=>45, 'email'=>'lz@php.cn'],
    ['id'=>5, 'name'=>'老韩','age'=>50, 'email'=>'lh@php.cn'],
];
return $data;

View:

<table border="1" cellpadding="5" cellspacing="0" width="60%">
    <caption>员工信息表</caption>
    <tr bgcolor="#90ee90">
        <th>id</th>
        <th>name</th>
        <th>age</th>
        <th>email</th>
    </tr>
    <?php foreach ($data as $staff) :?>
        <tr align="center">
            <td><?=$staff['id']?></td>
            <td><?=$staff['name']?></td>
            <td><?=$staff['age']?></td>
            <td><?=$staff['email']?></td>
        </tr>
    <?php endforeach;?>

</table>

Controlloer:

<?php
class Staff {
    public function show ($data) {
        return include __DIR__ . '/../view/show.php';
    }
}

入口文件:

<?php
/**
 * Created by PhpStorm.
 * User: apple
 * Date: 2019/10/6
 * Time: 8:53 PM
 */
//print_r($_SERVER['REQUEST_URI']);
$uri = explode('/', $_SERVER['REQUEST_URI']);
print_r($uri);
$controller = ucfirst($uri[4]);
$action = $uri[5];
require_once __DIR__ . '/model/model.php';
require_once __DIR__ . '/controller/staff.php';
echo (new $controller)->show($data);

————————————

二、composer安装与使用

composer是php的管理依赖关系的工具,简单说框架是一个台式机,里面配件都装好的一个整体。composer就是把php的一些包,像攒机的配件一样,组合起来。

三、tp51的安装与运行

执行命令: `composer create-project topthink/think tp51`

tp51是安装目录,没有的话可以自动创建,当然要提前cd到上一级目录

创建虚拟主机要把目录定位在public

四、tp51实现mvc访问

创建数据库,打开navicat,把老师给的sql文件导入

连接数据库,在config/datebase.php下设置:

实例

// 服务器地址,MacOS/Linux: localhost
    'hostname'        => '127.0.0.1',
    // 数据库名
    'database'        => 'tp51',
    // 用户名
    'username'        => 'root',
    // 密码
    'password'        => 'root',
    // 数据库调试模式
    'debug'           => true,

运行实例 »

点击 "运行实例" 按钮查看在线实例

创建控制器

通常控制器类中的方法我们称之为操作,tp框架下默认在application目录下的模块下的控制器类符合psr4的规范就会自动加载,框架默认是要访问根目录/入口文件(index.php)/index(默认控制器类)/index(默认操作)

这里为了规范和方便,在index模块下(文件夹),创建了mvc文件夹,controller目录下新建Staff类,然后创建index操作

实例

<?php

namespace app\index\controller;

use think\Controller;

class Staff extends Controller
{
    // 默认操作index,显示所有员工信息
    public function index()
    {
        // 1. 从模型中获取数据

        // 2. 选择合适的视图输出模型数据
    }
}

运行实例 »

点击 "运行实例" 按钮查看在线实例

Model层创建Staff类,一般类名同数据库的表名一致

实例

<?php
/**
 * Created by PhpStorm.
 * User: apple
 * Date: 2019/10/7
 * Time: 1:19 AM
 */

namespace app\index\model;
use think\Model;

class Staff extends Model
{

}

运行实例 »

点击 "运行实例" 按钮查看在线实例

完善controller的staff类

实例

<?php
/**
 * Created by PhpStorm.
 * User: apple
 * Date: 2019/10/7
 * Time: 1:10 AM
 */

namespace app\index\controller;
use think\Controller;
use app\index\model\Staff as StaffModel;

class Staff extends Controller
{
    //默认操作index,显示所有员工信息
    public function index ()
    {
        //1、从模型中获取数据  
        $staffs = StaffModel::all();
        //2、选择合适的视图输出模型数据
        return $this->fetch('index', ['staffs'=>$staffs]);
    }
}

运行实例 »

点击 "运行实例" 按钮查看在线实例

view层必须建立文件夹同控制器类名相同(staff)下面建立与类里的操作(index)相同的模版(index.php)

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户信息表</title>
</head>
<body>
    {//使用模版标签}
    {foreach $staffs as $staff}
        {$staff.name}:{$staff.email}<br>
    {/foreach}
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

最后路由可以省去入口文件,在public下的htaccess里更改:

实例

//在index.php后面加上?

RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]

运行实例 »

点击 "运行实例" 按钮查看在线实例

五、总结

  • 更换composer的中国镜像时,系统提示要更改全局的composer.json,经查阅,只需要在composer config -g  repo.packagist composer https://packagist.phpcomposer.com  在composer config后面加上-g

  • 我猜的坑,在view下没有建里staff文件夹

批改状态:未批改

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学