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的变化和不使用框架类的一样):

  • 相关阅读:
    CodeForces 785D Anton and School
    CodeForces 785C Anton and Fairy Tale
    CodeForces 785B Anton and Classes
    CodeForces 785A Anton and Polyhedrons
    爱奇艺全国高校算法大赛初赛C
    爱奇艺全国高校算法大赛初赛B
    爱奇艺全国高校算法大赛初赛A
    EOJ 3265 七巧板
    EOJ 3256 拼音魔法
    EOJ 3262 黑心啤酒厂
  • 原文地址:https://www.cnblogs.com/lpxspring/p/12128893.html
Copyright © 2011-2022 走看看