Blogger Information
Blog 42
fans 2
comment 0
visits 53940
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
MVC原理 ThinkPhp51安装与运行(MVC原理及分析 TP51 用composer下载与安装 运行简单案例)2019年3月19日
小明的博客
Original
745 people have browsed it

一、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文件夹

Correction status:Uncorrected

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments