美文网首页
框架流程

框架流程

作者: 孤岛渔夫 | 来源:发表于2017-04-13 11:38 被阅读0次

** 实际上框架的目的就是为了让前后端分离,代码更清晰,便于维护,各干各的事情.一目了然.**

  • 新建框架根目录 dream
  • 在根目录下建立单一入口文件 index.php
<?php
define('DREAM', __DIR__);//定义根目录常量  
define('APP', DREAM .'/App/');//定义应用目录   
define('CORE' , DREAM ,'/Core/');//定义核心文件目录 
define('DEBUG' , true);//定义调试模式 
//判断是否开启调试
if(DEBUG){
  ini_set('display_errors' , 'On');
}else{
    ini_set('display_errors' , 'Off');
}
//引入公共函数类库
require CORE . 'Common/function.php';
//引入框架核心文件
require CORE . 'dream.php';
//注册自动加载类
spl_autoload_register('\Core\dream::_autoload');
//启动框架
Core\dream::run();
  • 在根目录新建 App文件夹 和 Core文件夹
  • 在Core文件夹下新建 Common文件夹
  • 在Common 文件夹下 新建 function.php
<?php
配置公共方法
function p($var) //打印函数
{
    if (is_bool($var)) {
        var_dump($var);
    } elseif (is_null($var)) {
        var_dump(null);
    } else {
        echo "<pre style='position: relative;z-index: 1000;padding: 10px;border-radius: 5px;background: #F5F5F5;border: 1px solid #aaa;font-size: 14px;line-height: 18px;opacity:0.9;'>" . print_r($var, true) . "</pre>";
    }
}
  • 在Core 文件 下 新建框架核心文件 dream.php
<?php
namespace Core;//定义命名空间
class dream
{
static public $classFile = [];
//框架启动方法
  static public function run()
  {
    
  }
//自动加载类 当我们new 一个不存在的类 时 自动调用该方法
 static public function _autoload($class)
  {
    //先处理 类名 的反斜线为正斜线
    $class = str_replace('\\', '/', $class);
    //然后再拼接文件路劲
    $file = DREAM . '/' . $class . '.php';
    //判断文件是否存在
      if(isset($classFile[$class])){
         return true;
      } else {
        require $file;
        $classFile[$class] = $class;
      }
}
  • 在Core文件 下 新建路由文件 route.php
<?php
namespace Core;
class route
{
  public $ctrl;
  public $action;
  public function __construct()
  {
    //判断路劲是否存在 且 路劲不能等于 '/'
    if(isset($_SERVER['REQUEST_URL']) && $_SERVER['REQUEST_URL'] != '/'){
        //接收并处理路径
        $path = $_SERVER['REQUEST_URL'];
        //去除两边的'/',并分割
        $patharr = explode('/', trim($path, '/'));
        //如果存在下标为 0  的就存储为控制器名
        if(isset($patharr[0])){
          $this->ctrl = $patharr[0];
        }
        //释放 为后面截取参数做准备
        unset($patharr[0]);
        //下标为 1 的如果存在就存储为方法名 并释放 否则就默认为index操作
        if(isset($patharr[1])){
          $this->action = $patharr[1];
          unset($patharr[1]);
        } else {
          $this->action = 'index';
        }
        //统计$patharr 的数量
        $count = count($patharr) + 2;
        $i = 2;
        while($i < $count){
           //判断传的参数是否都存在 然后获取参数 否则不做动作
            if(isset($patharr[$i] + 1)){
                $_GET[$patharr[$i]] = $patharr[$i + 1];
            }
            $i = $i +2;
        }
        
      } else {
        $this->action = 'index';
        $this->ctrl = 'index';
      }
  } 
}

然后再 dream.php 核心文件中加载 控制和方法

<?php
namespace Core;
class keep
{
    static public $classMap = [];
    public $assign;
     static public function run()
    {
        $route =new \Core\route();
        $ctrlClass = ucfirst($route->ctrl);
        $action = $route->action;
        $ctrlFile = APP.'Controller/'.$ctrlClass.'Controller.class.php';
        $ctrlClass = '\\'.MODULE.'\\Controller\\'.$ctrlClass.'Controller';
        if (is_file($ctrlFile)) {
            require $ctrlFile;
            $ctrl = new $ctrlClass;
            $ctrl->$action();
        } else {
            throw new \Exception('找不到控制器',$ctrlClass);
        }
    }

    static public function _autoload($class)
    {
        $class = str_replace('\\','/',$class);
        $file = KEEP.'/'.$class.'.php';
        if (isset(self::$classMap[$class])) {
            return true;
        }else{
            if (is_file($file)) {
                require $file;
                self::$classMap[$class] = $class;
            }else{
                return false;
            }
        }
    }
    //将控制器里发送的数据 接收 并存储
    public function assign($name,$value)
    {
        $this->assign[$name] = $value;
    }
    //加载模板文件
    public function display($file)
    {
        //对接收到了文件名 拼接处理
        $file = APP.'View/'.$file;
        //如果存在 就引入
        if (is_file($file)) {
          //这里extract 是php 的一个函数 作用是将 数据打散 在模板使用
            extract($this->assign);
            require $file;
        }
    }
}
  • 并在App 文件夹下 新建 Controller 文件夹.
  • 在Controller 文件夹下 新建IndexController.class.php //这里为了防止命名冲突导致加载错误 所以名称这样建
  • 在Core 文件夹下 新建 Lib 文件夹 在建立 model.php//连接数据库
<?php
namespace Core\Lib;
class model extends \PDO //继承PDO
{
    public function __construct()
    {
        $dsn = 'mysql:host=localhost;dbname=test';//主机名 和库名
        $username = 'root';//用户名
        $passwd = 'root';//密码
        try {
            parent::__construct($dsn, $username, $passwd);
        } catch (\PDOException $e) {
            p($e->getMessage());//失败抛出异常
        }
    }
}
  • 在Controller 下的IndexController.class.php 文件 进行数据 发送模板 加载模板
  • $this->assign 方法 和$this->display 方法 在核心文件 dream.php 中定义
<?php
namespace App\Controller;
use Core\Lib\model;
class IndexController extends \Core\keep
{
    public function index()
    {
        $model = new \Core\Lib\model();
        $sql = "SELECT * from qiduo_market";
        $res = $model->query($sql);
        $data = $res->fetchAll();
//        $data = 'Hello Wrold';
        $this->assign('data',$data);
        $this->display('index.html');

    }
}

** 一套流程就是这样的,框架的作用是为了提高重用性,可维护性和便捷的操作.但是由于框架众多,功能齐全,但是自己又用不到那么多,占用资源.所以有必要试试做一个自己的框架. **

相关文章

  • 布尔商城项目

    框架流程:

  • iOS 框架的创建

    iOS框架的创建(一) —— 一个详细的框架创建流程(一)iOS框架的创建(二) —— 一个详细的框架创建流程(二)

  • 爬虫之Scrapy框架--------> @_@

    scrapy框架的流程图2018-11-01框架流程图 1、scrapy框架主要为个块      (1)Scrap...

  • iOS芝麻信用接入、授权、获取芝麻信用分最全档案(官方文档)

    一、整体框架流程和接入流程 1.1 整体框架流程 1.2 接入流程此文档,为完整的对接流程中的第三步,芝麻信用移动...

  • 框架

    框架与系统 框架与流程 框架强调是结构 系统强调全面 流程强调做事的先后顺序 建房子要有框架 里面豪华否要有细节

  • 框架流程

    ** 实际上框架的目的就是为了让前后端分离,代码更清晰,便于维护,各干各的事情.一目了然.** 新建框架根目录 d...

  • 框架流程

    一、浏览器发送请求 1、用户输入网址 2、浏览器根据请求转变HTTP的请求包 二、服务器接收到请求 1、http模...

  • UiPath主流程框架搭建

    一、框架简介 该框架提供了一个线性流程开发的模板,帮助用户设计业务流程从开始到结束运行的主框架。此框架中将了系统配...

  • 破界突围之路:关于流程规划的思考与认知(二)

    接上篇,其次,在流程架构(框架)的基础上,进行流程的分级。 我们将流程框架中每一项活动进行下级的分解,形成...

  • 流程法和逻辑框架法

    流程法和逻辑框架法 流程法和逻辑框架法也是在实战中经常用到的“切”的方法。流程法,顾名思义就是把问题按照某种流程步...

网友评论

      本文标题:框架流程

      本文链接:https://www.haomeiwen.com/subject/vxtmattx.html