博客列表 >MVC原理 ThinkPhp51安装与运行(MVC原理及分析 TP51 用composer下载与安装 运行简单案例)2019年3月19日

MVC原理 ThinkPhp51安装与运行(MVC原理及分析 TP51 用composer下载与安装 运行简单案例)2019年3月19日

小明的博客
小明的博客原创
2019年10月07日 10:54:17744浏览

一、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 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议