zoukankan      html  css  js  c++  java
  • php之mvc(单一入口)

    代码目录

     代码下载:

    https://github.com/lpx20181019/php_advanced/tree/master/single_entry

    代码框架图

    代码调用流程图

    index.php

    header('Content-Type:text/html; charset=utf8');
    require './framework/framework.class.php';
    $app = new framework();
    $app->runApp();

    入口文件不需要手动引入其他文件,而交给框架类,让他去引入需要引入的文件。

    framework类

    <?php
    /**
     * 框架基础类
     */
    class framework{
        public function runApp(){
            $this->loadConfig();        //加载配置
            $this->registerAutoLoad();  //注册自动加载方法
            $this->getRequestParams();  //获得请求参数
            $this->dispatch();          //请求分发
        }
        /**
         * 注册自动加载方法
         */
        private function registerAutoLoad(){
            spl_autoload_register(array($this,'user_autoload'));
        }
        /**
         * 自动加载方法
         * $param $class_name string 类名
         */
        public function user_autoload($class_name){
            //定义基础类列表
            $base_classes = array(
                //类名 => 所在位置    
                'model'            => './framework/model.class.php',
                'MySQLPDO'        => './framework/MySQLPDO.class.php',
            );
            //依次判断 基础类、模型类、控制器类
            if (isset($base_classes[$class_name])){
                require $base_classes[$class_name];
            }elseif (substr($class_name,-5) == 'Model'){
                require './application/'.PLATFORM."/model/{$class_name}.class.php";
            }elseif (substr($class_name, -10) == 'Controller'){
                require './application/'.PLATFORM."/controller/{$class_name}.class.php";
            }
        }
        /**
         * 载入配置文件
         */
        private function loadConfig(){
            //使用全局变量保存配置
            $GLOBALS['config'] = require './application/config/app.conf.php';
        }
        /**
         * 获取请求参数,p=平台 c=控制器 a=方法
         */
        private function getRequestParams(){
            //当前平台
            define('PLATFORM', isset($_GET['p']) ? $_GET['p'] : $GLOBALS['config']['app']['default_platform']);
            //得到当前控制器名
            define('CONTROLLER', isset($_GET['c']) ? $_GET['c'] : $GLOBALS['config'][PLATFORM]['default_controller']);
            //当前方法名
            define('ACTION', isset($_GET['a']) ? $_GET['a'] : $GLOBALS['config'][PLATFORM]['default_action']);
        }
        /**
         * 请求分发
         */
        private function dispatch(){
            //实例化控制器
            $controller_name = CONTROLLER.'Controller';
            $controller = new $controller_name;
            //调用当前方法
            $action_name = ACTION . 'Action';
            $controller->$action_name();
        }
    }
    $GLOBALS['config']是一个自动载入配置文件(包括数据库信息)的变量,在基础模型类里填入数据库信息时可以直接通过$GLOBALS['config']['db']['']的形式写入数据库的信息。

    实现效果图(url的变化和不使用框架类的一样):

  • 相关阅读:
    动态规划----背包问题
    动态规划----最长公共子序列
    贪心算法---codeforce680D Bear and Tower of Cubes
    贪心算法----Fence Repair(POJ 3253)
    线段树拓展----HDU 6315 Naive Operations
    Saruman`s Army(POJ 3069)
    字典序最小问题 Best Cow Line (POJ 3617)
    RMQ
    牛客2018年第二次acm暑期培训----H-Diff-prime Pairs
    牛客2018年第二次多校培训----A-run
  • 原文地址:https://www.cnblogs.com/lpxspring/p/12128893.html
Copyright © 2011-2022 走看看