{"id":17955663,"url":"https://github.com/limingxinleo/x-phalcon-middleware","last_synced_at":"2025-03-25T02:30:53.932Z","repository":{"id":55463268,"uuid":"109202425","full_name":"limingxinleo/x-phalcon-middleware","owner":"limingxinleo","description":"Phalcon 中间件","archived":false,"fork":false,"pushed_at":"2022-08-09T19:44:07.000Z","size":30,"stargazers_count":8,"open_issues_count":3,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-19T06:50:01.739Z","etag":null,"topics":["middleware","phalcon"],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/limingxinleo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-11-02T01:22:10.000Z","updated_at":"2020-12-19T07:28:33.000Z","dependencies_parsed_at":"2022-08-15T01:00:14.349Z","dependency_job_id":null,"html_url":"https://github.com/limingxinleo/x-phalcon-middleware","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/limingxinleo%2Fx-phalcon-middleware","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/limingxinleo%2Fx-phalcon-middleware/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/limingxinleo%2Fx-phalcon-middleware/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/limingxinleo%2Fx-phalcon-middleware/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/limingxinleo","download_url":"https://codeload.github.com/limingxinleo/x-phalcon-middleware/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245385302,"owners_count":20606642,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["middleware","phalcon"],"created_at":"2024-10-29T10:31:38.479Z","updated_at":"2025-03-25T02:30:53.617Z","avatar_url":"https://github.com/limingxinleo.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# x-phalcon-middleware\na phalcon middleware component\n\n[![Build Status](https://travis-ci.org/limingxinleo/x-phalcon-middleware.svg?branch=master)](https://travis-ci.org/limingxinleo/x-phalcon-middleware)\n\n## 感谢\n[https://github.com/shouhuyou/phalcon-midddleware.git](https://github.com/shouhuyou/phalcon-midddleware.git)\n\n## 安装\n`composer require limingxinleo/x-phalcon-middleware`\n\n## 配置\n添加服务\n~~~php\n\u003c?php\n \nuse Xin\\Phalcon\\Middleware\\Mvc\\Dispatcher as MvcDispatcher;\nuse Xin\\Phalcon\\Middleware\\Mvc\\Dispatcher71 as MvcDispatcher71;\n\n$di-\u003esetShared('middlewareManager', function () {\n    $middlewareManager = new Manager();\n    //注册中间件\n    $middlewareManager-\u003eadd('test', \\Tests\\App\\Middleware\\Test1Middleware::class);\n    $middlewareManager-\u003eadd('test2', \\Tests\\App\\Middleware\\Test2Middleware::class);\n    $middlewareManager-\u003eadd('test3', \\Tests\\App\\Middleware\\Test3Middleware::class);\n\n    return $middlewareManager;\n});\n\n//替换默认的dispatcher\n$di-\u003esetShared('dispatcher', function () {\n\n    if (version_compare(PHP_VERSION, '7.1', '\u003e')) {\n        $dispatcher = new MvcDispatcher71();\n    } else {\n        $dispatcher = new MvcDispatcher();\n    }\n    $dispatcher-\u003esetDefaultNamespace('Tests\\App\\Controllers');\n\n    return $dispatcher;\n});\n~~~\n\n## 使用\n* 创建中间件\n~~~php\n\u003c?php\n\nnamespace App\\Middleware;\n\nuse Xin\\Phalcon\\Middleware\\Middleware;\n\nclass Aaa extends Middleware\n{\n public function handle($request ,\\Closure $next)\n {\n     //在中间件中使用service\n     if($this-\u003erequest-\u003eisAjax()){\n         return $this-\u003eresponse-\u003eredirect('/login');\n      }\n      //前置操作\n      echo __METHOD__.'\u003chr\u003e';\n      $response = $next($request);\n     //后置操作\n      echo __METHOD__.'\u003chr\u003e';\n    \n     return $response;\n  }\n}\n~~~\n\n* 控制器中使用中间件\n~~~php\n\u003c?php\nnamespace Tests\\App\\Controllers;\n\nuse Phalcon\\Mvc\\Controller;\n\nclass IndexController extends Controller\n{\n    public function indexAction()\n    {\n        return $this-\u003eresponse-\u003esetJsonContent([\n            'success' =\u003e true,\n            'data' =\u003e ['action' =\u003e 'index']\n        ]);\n    }\n\n    /**\n     * @desc\n     * @author limx\n     * @return \\Phalcon\\Http\\Response|\\Phalcon\\Http\\ResponseInterface\n     * @Middleware('test')\n     */\n    public function testAction()\n    {\n        return $this-\u003eresponse-\u003esetJsonContent([\n            'success' =\u003e true,\n            'data' =\u003e ['action' =\u003e 'test']\n        ]);\n    }\n\n    /**\n     * @desc\n     * @author limx\n     * @return \\Phalcon\\Http\\Response|\\Phalcon\\Http\\ResponseInterface\n     * @Middleware('test2')\n     */\n    public function test2Action()\n    {\n        return $this-\u003eresponse-\u003esetJsonContent([\n            'success' =\u003e true,\n            'data' =\u003e ['action' =\u003e 'test2']\n        ]);\n    }\n\n    /**\n     * @desc\n     * @author limx\n     * @return \\Phalcon\\Http\\Response|\\Phalcon\\Http\\ResponseInterface\n     * @Middleware('test2')\n     * @Middleware('test3')\n     */\n    public function test3Action()\n    {\n        return $this-\u003eresponse-\u003esetJsonContent([\n            'success' =\u003e true,\n            'data' =\u003e ['action' =\u003e 'test2']\n        ]);\n    }\n}\n~~~\n\n## 中间件执行顺序\n中间件定义\n~~~\nclass OneMiddleware extends Middleware\n{\n    public function handle($request, Closure $next)\n    {\n        echo 'One1' . PHP_EOL;\n        $response = $next($request);\n        echo 'One2' . PHP_EOL;\n        return $response;\n    }\n}\n\nclass TwoMiddleware extends Middleware\n{\n    public function handle($request, Closure $next)\n    {\n        echo 'Two1' . PHP_EOL;\n        $response = $next($request);\n        echo 'Two2' . PHP_EOL;\n        return $response;\n    }\n}\n\nclass ThreeMiddleware extends Middleware\n{\n    public function handle($request, Closure $next)\n    {\n        echo 'Three1' . PHP_EOL;\n        $response = $next($request);\n        echo 'Three2' . PHP_EOL;\n        return $response;\n    }\n}\n\nclass FourMiddleware extends Middleware\n{\n    public function handle($request, Closure $next)\n    {\n        echo 'Four1' . PHP_EOL;\n        $response = $next($request);\n        echo 'Four2' . PHP_EOL;\n        return $response;\n    }\n}\n~~~\n\n使用如下\n~~~\n/**\n * Class IndexController\n * @package Tests\\App\\Controllers\n * @Middleware('sort1')\n */\nclass IndexController extends Controller\n{\n    public function initialize()\n    {\n        $this-\u003emiddleware-\u003eset([\n            'abs',\n            'test3'\n        ]);\n    }\n    \n    /**\n     * @Middleware('sort2')\n     * @Middleware('sort3')\n     */\n    public function indexAction()\n    {\n        return $this-\u003eresponse-\u003esetJsonContent([\n            'success' =\u003e true,\n            'data' =\u003e ['action' =\u003e 'index']\n        ]);\n    }\n}\n~~~\n\n结果\n~~~\n'abs.start',\n'test3.start',\n'sort1.start',\n'sort2.start',\n'sort3.start',\n'sort3.end',\n'sort2.end',\n'sort1.end',\n'test3.end',\n'abs.end',\n~~~","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flimingxinleo%2Fx-phalcon-middleware","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flimingxinleo%2Fx-phalcon-middleware","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flimingxinleo%2Fx-phalcon-middleware/lists"}