Minor【 PHP框架】1.简介

1.1
Minor是什么

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

  (如果当还不错给个star)

  

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类)
  5. 符合PSR4

  

  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;
}

  下面是自身之布:

 server{
        listen         80;
    server_name    www.minor.com;

    root html/minor/public;

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

    location ~ \.php$ {
        fastcgi_pass    127.0.0.1:9000;
        fastcgi_index    index.php;
        fastcgi_param    SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;                      
    }                
    }

 

  这样当你拜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
配置

  1.5.1 读取与安装配置

  有时你用在程序执行阶段看安排的价。你得应用 Config 类:

Config::get(['app' => 'TIMEZONE']);

  这样您就是可以获得app/Config/app.php配置文件中TIMEZONE的布置项值。(请留心,这里不肯定是app.php,请观察本文1.4.1未遭之手续3遭受可以看在构建$app这个目标时传了一个参数:$config = [‘app’ => require APP_DIR . ‘Config/app.php’
…)

  以此’app’
指向了app/Config/app.php文件,当然你吗可以对任何文件(eg:
app_dev.php)这样又当您行Config::get([‘app’ =>
‘TIMEZONE’])时便会见从app_dev.php文件中拿走TIMEZONE这个布局起的价值了)。

  

  你呢足以指定一个默认值,如果安排选不存它以给归:

Config::get(['app' => 'TIMEZONE'], 'UTC');

  注意“[‘xxx’ =>
‘xxx’]”语法风格好用来访问不同文件里的价值,你吗得以于程序执行阶段设置配置的值:

Config::set(['test' => 'key'], 'value');

  

  1.5.2 配置项

    1.5.2.1 应用配置

    一部分常用之下配置,你为堪增长自己之安排起。**

'CHARSET'    =>    'UTF-8', // 设置charset

'TIMEZONE'    =>    'PRC',    //设置时区

'SESSION_START'    => true, // 设置是否自动开启session,当开启后就可以从MinorRequest对象中通过getMinorSession()方法获取当前session对象

'DEBUG'  => true, // 设置是否开启DEBUG模式,如果开启则程序中发生的错误就会全部显示出来,如果设置为false或者不设置则当发生错误或异常时就会执行以下的全局错误处理函数和全局异常处理函数。

 

    1.5.2.2 全局十分处理

    当DEBUG为false并且动用抛出异常时就见面实施配置的是匿名函数,你得当此函数里做任何操作,比如向管理员发送通知邮件或记录日志等等

'EXCEPTION_HANDLER' =>  function($e){
                                header('HTTP/1.1 500 Internal Server Error');
                                exit(require APP_DIR . 'View/exception.php');
                            },

 

 

 

    1.5.2.3 全局错误处理

    当DEBUG为false并且利用来语法错误时便会见尽配置的之匿名函数,你可以当是函数里开另外操作,比如为管理员发送通知邮件或记录日志等等

'ERROR_HANDLER' =>  function($errno, $errstr, $errfile, $errline){
                            header('HTTP/1.1 500 Internal Server Error');
                            exit(require APP_DIR . 'View/error.php');
                        },

 

 

 

    1.5.2.4 404处理

    当DEBUG为false并且动尚未匹配到应的路由时虽会尽这个匿名函数,你可以在这函数里展示一个404页面。

'404_HANDLER'   =>  function($url){
                            header('HTTP/1.1 404 Not Found');
                            header("status: 404 Not Found");
                            exit(require APP_DIR . 'View/404.php');
                        },

 

 

 

    1.5.2.5 变量过滤器

    当通过$minorRequest->get(‘param_name’))获取get参数或者经过$minorRequest->post(‘param_name’)时,框架会自行调用这个函数对$_GET[‘param_name’]或者$_POST[‘param_name’]开拍卖后赶回

'DEFAULT_FILTER'    =>  function($param){
                                return htmlspecialchars($param);
                            },

 

1.6
请忽视以上吹牛逼字段

  恩!就是要忽视。别怪我尚未提醒

  图片 1

相关文章