Minor【 PHP框架】1.简介

1.1 Minor是什么

  Minor是一个简单但是优秀的PHP框架,It just did what a framework should do. 只做一个框架应该做的,简单而又强大!

  框架Github地址:github.com/Orlion/Minor

  (如果觉得还不错给个star哦(^-^)V)

  作者: Orlion

  知乎:https://www.zhihu.com/people/orlion

  Github: https://github.com/Orlion

  

1.2 Minor有什么

  1.2.1 Minor主要提供了:

  1. MVC分层结构(实际上是没有Model层的,用户可以自己任意创建)
  2. Ioc(体现在Minor中就是类似于symfony/laravel的服务容器)
  3. Event(类似于symfony/laravel中的事件机制,是一个观察者模式的具体实现)
  4. Proxy(代理,是一个代理模式的具体实现,本人在创造Minor时是想实现类似Spring的AOP功能的,但是在写的时候发现如果要实现AOP则配置文件势必会变得冗杂,不利于开发所以就放弃了AOP,而提供了一个Proxy类)

  

  1.2.2 Minor为什么只提供了这么点东西?

  现在的PHP框架大多很臃肿,提供了各种功能,在本人看来这只是在重复造轮子(虽然写框架也是在重复造轮子...),框架只需要提供给用户一个架子和一些工具即可,不应该给用户一大堆东西(一大堆重复造的轮子),不应该捆绑用户而应该给用户极大自由,这样也会使用户更容易上手。个人觉得java的Spring框架就是一个很不错的框架,足够简单,足够强大,小即是美!而Minor就是在这种思想下诞生的框架。没有各种乱七八糟的分页、ORM、模板引擎、日志、队列等功能,就是一个很纯粹的“架子”。

  1.2.3 优点

  快! 性能高! 简单! 容易上手! 结构清晰!

  小即是美!

1.3 安装

  只需从github上(github.com/Orlion/Minor) git clone或者直接复制zip压缩包然后解压到项目中即可。

  Minor框架通过设置 public/.htaccess 文件去除链接中的index.php。 如果你你的服务器使用的是 Apache,请确保开启 mod_rewrite 模块。

  如果是 Nginx 服务器,将下列指令放到网址的配置文件中:

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

  这样当你访问http://localhost/public/时就可以看到安装成功的画面了。 (当然你也可以配置一下把public去掉) 

1.4 Minor是如何运转的

  1.4.1 整体流程

  以访问网址http://www.servername.com/demo/test为例:

  1. 所有请求重定向到public/index.php文件
  2. 定义全局变量

    define(‘APP_DIR‘, realpath(__DIR__.‘/../app/‘) .DIRECTORY_SEPARATOR);
    
    define(‘PUBLIC_DIR‘, realpath(__DIR__) .DIRECTORY_SEPARATOR);
    
    define(‘VENDOR_DIR‘, realpath(__DIR__.‘/../vendor/‘) .DIRECTORY_SEPARATOR);
    
    define(‘ROOT_DIR‘, realpath(__DIR__.‘/../‘) .DIRECTORY_SEPARATOR);
  3. 根据配置文件来创建App对象:$app

    $app = \Minor\Framework\App::getInstance(
        $config     = [‘app‘ => require APP_DIR . ‘Config/app.php‘, ‘test‘ => require APP_DIR . ‘Config/test.php‘],
        $providers  = require APP_DIR . ‘Config/providers.php‘,
        $routes     = require APP_DIR . ‘Config/routes.php‘,
        $events     = require APP_DIR . ‘Config/events.php‘
    );
  4. App处理请求生成MinorResponse对象

    $response = $app->handle(
        $request = \Minor\HttpKernel\MinorRequestBuilder::buildMinorRequest()
    );
  5. 向用户返回响应

    $response->send();

  1.4.2 App是如何处理请求的

   public function handle(MinorRequest $minorRequest)
    {
        $minorResponse = MinorResponse::getInstance();

        $this->minorRequest = $minorRequest;

        list($controllerName, $actionName, $params) = $this->router->dispatcher($minorRequest->getUrl());

        if (!($controllerName && $actionName && is_array($params))) {
            if (!Config::get([‘app‘ => ‘DEBUG‘]) && ($handler = Config::get([‘app‘ => ‘404_HANDLER‘])) && ($handler instanceof \Closure)) {
                $handler($minorRequest->getRequestUrl());
            } else {
                throw new RouteException(‘404 Not Found‘);
            }
        } else {
            $minorResponse = $this->invoke($controllerName, $actionName, $params);
        }

        return $minorResponse;
    }
  1. 先初始化一个默认的响应对象

    $minorResponse = MinorResponse::getInstance();
  2. 调用Router的dispatcher($url)方法根据路由配置获取url对应的控制器和方法以及参数

    list($controllerName, $actionName, $params) = $this->router->dispatcher($minorRequest->getUrl());
  3. 执行控制器的制定方法,并返回响应对象

    $minorResponse = $this->invoke($controllerName, $actionName, $params);
    
    return $minorResponse;

1.5 请忽视以上吹牛逼字段

  恩!就是请忽视。别怪我没提醒

  

时间: 2024-07-31 14:33:10

Minor【 PHP框架】1.简介的相关文章

【转】Android 网络通信框架Volley简介(Google IO 2013)

Volley主页 https://android.googlesource.com/platform/frameworks/volley http://www.youtube.com/watch?v=yhv8l9F44qo&feature=player_embedded 1. 什么是Volley 在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,今年的Go

流式计算框架-STORM简介

在当前的数据分析领域,对实时数据的计算需求越来越强烈,在此领域,出现了各类计算框架,如:Storm.S4等.目前本土公司对这些流式计算框架的应用也比较广泛,但苦于相关文档英文居多,缺少成系列且与官方相对应的中文手册.本系列试图从官方文档翻译入手,给大家呈现较为完备的中文资料,同时也是对自身知识的总结沉淀. 在这个系列博客中,我们选择了twitter的Storm框架,原因很简单,因为本人长期使用的就是该框架,咱们先从简介开始. Apache Storm是一个免费.开源.分布式的实时计算系统.相对于

hadoop备战:yarn框架的简介(mapreduce2)

新 Hadoop Yarn 框架原理及运作机制 重构根本的思想是将 JobTracker 两个主要的功能分离成单独的组件,这两个功能是资源管理和任务调度 / 监控.新的资源管理器全局管理所有应用程序计算资源的分配,每一个应用的 ApplicationMaster 负责相应的调度和协调.一个应用程序无非是一个单独的传统的 MapReduce 任务或者是一个 DAG( 有向无环图 ) 任务.ResourceManager 和每一台机器的节点管理服务器能够管理用户在那台机器上的进程并能对计算进行组织.

客户端高性能组件化框架React简介、特点、环境搭建及常用语法

明天就是春节了 预祝大家新春快乐 [ ]~( ̄▽ ̄)~* 天天饭局搞得我是身心疲惫= = 所以更新比较慢 今天想跟大家分享的就是这个大名鼎鼎的React框架 简介 React是这两年非常流行的框架 并不难,还是挺容易上手的 起源于Facebook内部项目(一个广告系统) 传统页面从服务器获取数据,显示到浏览器上,用户输入数据传入服务器 但随着数据量增大,越来越难以维护了 Facebook觉得MVC不能满足他们的扩展需求了(巨大的代码库和庞大的组织) 每当需要添加一项新的功能或特性时,系统复杂度就

爬虫框架--scrapy简介

简介 scrapy被认为是比较简单的爬虫框架,资料比较齐全,网上也有很多教程.官网上介绍了它的四种安装方法,PyPI.Conda.APT.Source,我们只介绍最简单的安装方法. Windows下的安装 pip install scrapy Linux下的安装 apt-get install python-scrapy APT 因为Linux的强大及辅助工具比较多,大家比较喜欢在Linux下使用scrapy爬虫框架,Linux下编写python代码最强大的工具可属eclipse,但最方便的要属

自制简单的.Net ORM框架 (一) 简介

在自己研究ORM之前,也使用过几个成熟的ORM方案,例如:EntityFramework,PetaPoco,Dapper 等,用是很好用,但是对自己来说总是不那么方便,EF比较笨重,Dapper要自定义扩展等等,所以萌发了开发适合自己的ORM的想法,因为未起名字,所以下文所有地方都使用MyORM来代替. Nuget地址: https://www.nuget.org/packages/Dai.CommonLib.Sql 简介: MyORM是一个小型的ORM,稍微参考了PetaPoco,支持简单的对

chromium嵌入式框架libcef简介

 Introduction CEF简介 The Chromium Embedded Framework (CEF) is a simple framework for embedding Chromium-based browsers in other applications. It is a BSD-licensed open source project founded by Marshall Greenblatt in 2008 and based on the Google Chr

DeepLearning tutorial(6)易用的深度学习框架Keras简介

之前我一直在使用Theano,前面五篇Deeplearning相关的文章也是学习Theano的一些笔记,当时已经觉得Theano用起来略显麻烦,有时想实现一个新的结构,就要花很多时间去编程,所以想过将代码模块化,方便重复使用,但因为实在太忙没有时间去做.最近发现了一个叫做Keras的框架,跟我的想法不谋而合,用起来特别简单,适合快速开发.(其实还有很多其他的深度学习框架都是比较容易用的.) 1. Keras简介 Keras是基于Theano的一个深度学习框架,它的设计参考了Torch,用Pyth

JEESZ分布式框架平台简介

平台简介 Jeesz是一个分布式的框架,提供项目模块化.服务化.热插拔的思想,高度封装安全性的Java EE快速开发平台. Jeesz本身集成Dubbo服务管控.Zookeeper注册中心.Redis分布式缓存技术.FastDFS分布式文件系统.ActiveMQ异步消息中间件.Nginx负载均衡等分布式技术 使用Maven做项目管理,项目模块化,提高项目的易开发性.扩展性 以Spring Framework为核心容器,Spring MVC为模型视图控制器,MyBatis为数据访问层, Apach

android hook 框架 libinject2 简介、编译、运行

简介: libinject 最开始是2011年看雪android安全版版主之一‘古河’大神发布的一份android平台的注入库:  发个Android平台上的注入代码  ,网上很多随后发布的注入代码都是其变种,不过我这几天尝试运行那份代码,发现有些问题,本博运行和分析的代码是另外一位大神的改进版本,在我的环境里运行注入和挂钩都成功了 : Android中的so注入(inject)和挂钩(hook) - For both x86 and arm ,为了表示区别,我把这个项目称为  libinjec