2017-25 © Pedro Peláez
 

library phalcon-middleware

a phalcon middleware component

image

myph/phalcon-middleware

a phalcon middleware component

  • Wednesday, November 29, 2017
  • by myph
  • Repository
  • 4 Watchers
  • 6 Stars
  • 12 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 2 Forks
  • 0 Open issues
  • 2 Versions
  • 50 % Grown

The README.md

phalcon-midddleware

a phalcon middleware component, (*1)

安装

composer require myph/phalcon-middleware, (*2)

配置

在service.php中添加, (*3)

  $di->setShared('middlewareManager',function(){
    $middlewareManager = new \Myph\Middleware\Manager();
    //注册中间件
    $middlewareManager->add('middlewareAlias','middlewareHandle');
    // ...
    return $middleware
  });
  //替换默认的dispatcher
  $di->setShared('dispatcher',\Myph\Dispatcher::class);

使用

  • 创建中间件, (*4)

    中间件必须继承Myph\Middleware这个类,并实现handle($request,\Closure $next)方法, (*5)

    example: ```php <?php, (*6)

    namespace App\Middleware;, (*7)

    use Myph\Middleware;, (*8)

    class Aaa extends Middleware { public function handle($request ,\Closure $next) { //在中间件中使用service if($this->request->isAjax()){ return $this->response->redirect('/login'); } //前置操作 echo METHOD.', (*9)


'; $response = $next($request); //后置操作 echo METHOD.', (*10)


';, (*11)

     return $response;
  }

} * 注册中间件php $middlewareManager->add('middlewareAlias1',App\Middleware\Aaa::class); $middlewareManager->add('middlewareAlias2','middlewareHandle2'); $middlewareManager->add('middlewareAlias3','middlewareHandle3'); ``` * 分配中间件 * 全局中间件, (*12)

若希望每个请求都会经过的中间件,可以添加全局中间件, (*13)

添加全局中间件只需在middlewareManger服务中使用set方法, (*14)

example: $middlewareManager->set('aaa'); //or $middlewareManger->set(['bbb','ccc']); * 在控制器中分配, (*15)

在控制器的initialize()方法中调用middlewareManger服务, (*16)

example: php public function initialize() { $this->middleware->set( ['csrf','auth'], [ //这里可以使用only和except,对应的参数是方法名 'except'=>['login','register'] ] ); } * 使用Annotations 使用annotations可以直接在控制器类或者方法的注释中分配中间件 example: ```php <?php, (*17)

namespace App\Controllers;

/**
 * @Middleware('bbb');
 */
class IndexController extends ControllerBase
{
   /**
    * @Middleware('aaa','csrf','auth')
    */
    public function index()
    {
        echo __METHOD__.'<hr>';
    }
 }

``` 禁用annotationsMiddleware,可以在middlewareManager中使用$middlewareManger->useAnnotations(false);来禁用annotation, (*18)

其他

管理中间件可以单独使用一个文件来管理, (*19)

example: php $di->setShared('middlewareManager',function(){ $middlewareManager = new \Myph\Middleware\Manger(); require $this->get('config')->application->configDir.'middleware.php'; return $middlewareManager; }); 为什么要重写dispatcher?, (*20)

这里实现Phalcon的middleware是使用Myph\Dispatcher继承Phalcon\Mvc\Dispatcher重写了里面的_dispatch方法的,这个Myph\Dispatcher依赖于middlewareManager服务., (*21)

Phalcon原本的Phalcon\Mvc\Dispather是里面的Hooks是先是beforeExecuteRoute,后是调用控制器的initalize方法,执行handle后fire afterExecuteRoute的,这里如果不重写dispatcher的话,就不能实现initalize中分配中间件,只能使用annotations,而且,需要把Middleware中前置后置操作分开写., (*22)

The Versions

29/11 2017

dev-master

9999999-dev

a phalcon middleware component

  Sources   Download

MIT

by liaoliang

phalcon phalcon-middleware

04/05 2017

1.0.0

1.0.0.0

a phalcon middleware component

  Sources   Download

MIT

by liaoliang

phalcon phalcon-middleware