zoukankan      html  css  js  c++  java
  • Zendframework 的前端控制器到底是如何进行工作的?

    由于之前只学习了一个星期的zf,只停留在简单的使用上,对机制的理解还不够透彻。今天想仿照ZF新建一个简单的MVC框架,算是对自己先前一段时间的总结,也是为了更加深入的了解ZF,毕竟zf够强大。

    废话不多说,首先配置虚拟机,配置好虚拟机后,设置rewrite机制,几经波折,完成了。参考zf的index.php,开始写。毕竟自己是菜鸟,所以写的不太好。

    首先配置好环境变量。当遇到font控制器实例化的时候出现问题了,我提取了URi之后并且加载了相关的控制器,如何实例化控制器成了一个问题。上网百度了下关于font的相关介绍。

    zendframework的工作流程

    那么url所请求的控制器是如何实例化的?font是通过什么方式实现的?这就是我所关心的问题。

    fontcontroller采用的是单例模式,关于这一知识点,总结如下:

    单例模式的特点:一个类只有一个实例,并且通过getinstance自行创立,必须向整个系统提供这个实例(这个还有点不太明白,zendframework里面font控制器说明这一点,more example?)于是我把自己的font类改为单例模式:

     1 <?php
     2 /*
     3  * font用来完成URL请求的分配
     4  * 这里学习了单例模式的基本格式以及概念
     5  * 
     6  * */
     7 class Font
     8 {
     9     static private $_instance=NULL;
    10     private function __construct(){
    11         
    12     }
    13     
    14     private function __clone(){
    15         
    16     }
    17     static public function getInstance(){
    18         if(is_null(self::$_instance)||!isset(self::$_instance)){
    19             self::$_instance=new self();
    20         }
    21         return self::$_instance;
    22     }
    23     
    24     public function disPatch(){
    25     echo 'OK';
    26     }
    27     
    28     
    29     
    30     
    31 }

    经过测试,成功,但是,还是没有解决关于类和方法的实例化问题。几经思索,突然想起了上学期看到的《PHP模式框架与测试》里面关于映射的概念。google了一下,应用如下

     1 public function disPatch(){
     2         $url=$_SERVER["REQUEST_URI"];
     3          $pattern='/\//';
     4          $array=preg_split($pattern, $url);
     5          $controller=$array[1].'Controller';
     6          $action=$array[2].'Action';
     7         include PATH.'/controller/'.$controller.'.php';
     8          $conclass=new ReflectionClass($controller);
     9          $act=$conclass->getMethod($action);
    10          $con=$conclass->newInstance();
    11          $act->invoke($con);  
    12     }

    测试ok

  • 相关阅读:
    java积累
    mybatis
    Netty
    springcloud相关笔记整理
    java基础总结笔记
    读书笔记-RocketMQ实战与原理解析
    读书笔记-kafka权威指南
    读书笔记-rabbitmq实战指南
    Centos 部署ServiceDesk
    IDEA将新建项目上传至GitLab
  • 原文地址:https://www.cnblogs.com/phplover/p/2967023.html
Copyright © 2011-2022 走看看