Blogger Information
Blog 37
fans 0
comment 1
visits 29832
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
MVC案例和依赖注入方法以及路由原理-2019-10-12
H先生
Original
1144 people have browsed it



    1. 写一个依赖注入的案例, 内容自定义

1.png


DEMO2

实例

<?php
/**
 * MVC 思想
 * 任务:将商品信息展示出来 *
 */
//1. 依赖注入的案例

// 加载:模型类
require 'Model.php';

// 加载:视图
require 'View.php';

// 控制器
class Controller
{
    public function index(Model $model, View $view)
    {
        // 1. 获取数据

        $data = $model->getData();

        // 2. 渲染模版/视图
        return $view->fetch($data);
    }
}

// 客户端调用控制器
// 3.将模型与视图的实例化过程 放在控制器的外部实现
$model = new Model();
$view = new View();

$controller = new Controller();

// 将Model 和View的类实现,作为参数,注入到控制器的方法中 这就是依赖注入方法
// 注入点是:index 普通方法
// 1.控制器中的普通方法
// 2.控制器中的构造方法 (优点:简化代码 ,多对象使用)
echo $controller->index($model, $view);

?>

运行实例 »

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


Model 模型类:操作数据库

实例

<?php

// 模型类:操作数据库
class Model
{
    public function getData()
    {
        return [
            ['id'=>1, 'name'=>'苹果电脑', 'model'=>'MacBook Pro', 'price'=>25800],
            ['id'=>2, 'name'=>'华为手机', 'model'=>'P30 Pro', 'price'=>4980],
            ['id'=>3, 'name'=>'小爱同学', 'model'=>'AI智能音响', 'price'=>299],
        ];
    }
}

?>

运行实例 »

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



view 视图类:渲染数据


实例

<?php
// 视图类:渲染数据

class View
{
    public function fetch($data)
    {
        $table = '<table border="1" cellspacing="0" width="400">';
        $table .= '<caption>商品信息表</caption>';
        $table .= '<tr bgcolor="#add8e6"><th>ID</th><th>品名</th><th>型号</th><th>价格</th></tr>';

        foreach ($data as $product){

            $table .= '<tr>';
            $table .= '<td>' . $product['id'] . '</td>';
            $table .= '<td>' . $product['name'] . '</td>';
            $table .= '<td>' . $product['model'] . '</td>';
            $table .= '<td>' . $product['price'] . '</td>';
            $table .= '</tr>';

        }

        $table .= '</table>';

        return $table;
    }
}

?>

运行实例 »

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




    2. 写一个mvc应用的案例, 内容自定义


1.png




实例

<?php
/**
 * MVC 思想
 * 任务:将商品信息展示出来 *
 */


// 加载:模型类
require 'Model.php';

// 加载:视图
require 'View.php';

// 控制器
class Controller
{
    public function index()
    {
        // 1. 获取数据
        $model = new Model();
        $data = $model->getData();

        // 2. 渲染模版/视图
        $view = new View();
        return $view->fetch($data);
    }
}

// 客户端调用控制器
$controller = new Controller();
echo $controller->index();

?>

运行实例 »

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



    3. 写一个简单的路由, 理解路由的原理与目标


1.png





实例

<?php


// 路由的原理
// 字符串解析为数组使用explode() 第一个为/ 分隔符,第二个处理的数组
// 1.从url路径中解析出独立的单元
$url = $_SERVER['REQUEST_URI'];
echo $url;
$req = explode('/' , $url);
echo '<pre>'. print_r($req,true);

//admin: 后台模块
//User: 控制器
//add:控制器中的方法

$route = array_slice($req, 4, 3);
echo '<pre>'. print_r($route,true);

list($module, $controller, $action) = $route;
echo '模块:'.$module.'<br>控制器:'.$controller.'<br>操作:' .$action;

//http://php.io/1011/mvc/route.php/admin/user/add/name/maomao/age/36/salary/3300

// /name/maomao/age/36/salary/3300

// array_slice()从数组中取出一些数据
$values = array_slice($req,7,6);
echo '<pre>'. print_r($route,true);

for ($i=0; $i<count($values); $i+=2){
    $params[$values[$i]] = $values[$i+1];
}

echo '<pre>'. print_r($params,true);

// 控制器
class User
{
    public function add($name, $age, $salary)
    {
        return __METHOD__. ': 姓名: '.$name.', 年龄:'.$age.'岁'. ', 工资:'. $salary .'元';
    }
}


// 路由的目标,确定将URL中的操作映射到控制器中的方法上
echo call_user_func_array([(new User()), 'add'], $params);


?>

运行实例 »

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



































Correction status:qualified

Teacher's comments:mvc, 其实也没有想像中的难, 你也可以写一个
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
Author's latest blog post