{"id":23769971,"url":"https://github.com/morphable/micro","last_synced_at":"2026-03-29T08:30:16.738Z","repository":{"id":57019912,"uuid":"223790086","full_name":"Morphable/micro","owner":"Morphable","description":"new routing lib","archived":false,"fork":false,"pushed_at":"2023-04-21T20:30:08.000Z","size":56,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-12-27T05:16:34.048Z","etag":null,"topics":[],"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/Morphable.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":"2019-11-24T18:24:44.000Z","updated_at":"2019-12-03T12:39:23.000Z","dependencies_parsed_at":"2022-08-22T20:31:22.129Z","dependency_job_id":null,"html_url":"https://github.com/Morphable/micro","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Morphable%2Fmicro","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Morphable%2Fmicro/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Morphable%2Fmicro/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Morphable%2Fmicro/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Morphable","download_url":"https://codeload.github.com/Morphable/micro/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239952597,"owners_count":19723922,"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":[],"created_at":"2025-01-01T02:35:09.186Z","updated_at":"2026-03-29T08:30:16.674Z","avatar_url":"https://github.com/Morphable.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Micro\na micro framework based on the psr-15 and psr-7 standard\n\n### Simple usage\n```php\n\u003c?php\n\nuse \\Morphable\\Micro;\nuse \\Psr\\Http\\Message\\ServerRequestInterface;\n\n$micro = new Micro();\n\n$router = $micro-\u003erouting();\n\n$router-\u003eadd('GET', '/user/:id', function (ServerRequestInterface $request, array $args) {\n    $id = $args['id'];\n\n    /** @link https://www.php-fig.org/psr/psr-7/ */\n    return $response;\n});\n\n\n\ntry {\n    $response = $micro-\u003ehandle($request); // \\Psr\\Http\\Message\\ResponseInterface\n} catch (\\Exception $e) {\n    // 404\n}\n```\n\n### Callbacks\n```php\n\u003c?php\n\nuse \\Psr\\Http\\Message\\ServerRequestInterface;\n\n// specific method in controller\n$router-\u003eadd('GET', '/user/:id', ['controller', 'method']);\n\n// __invoke\n$router-\u003eadd('GET', '/user/:id', 'controller');\n\n// static method\n$router-\u003eadd('GET', '/user/:id', [controller::class, 'method']);\n\nfunction callback(ServerRequestInterface $request, array $args) {\n    return $response;\n}\n\n// function\n$router-\u003eadd('GET', '/user/:id', 'callback');\n\n// annonymous function\n$router-\u003eadd('GET', '/user/:id', function (ServerRequestInterface $request, array $args) {\n    return $response;\n});\n```\n\n### Route pattern\n```php\n\u003c?php\n\n// : is mandatory argument ?: is optional argument\n$router-\u003eadd('GET', '/user/:userId/profile', function ($request, $args){\n    $args['userId'] // second parameter in url\n});\n\n$router-\u003eadd('GET', '/callback/?:channel', function ($request, $args) {\n    $args['channel'] // second parameter or null\n})\n```\n\n### Middleware\n```php\n\u003c?php\n\nuse \\Psr\\Http\\Message\\ResponseInterface;\nuse \\Psr\\Http\\Message\\ServerRequestInterface;\nuse \\Psr\\Http\\Server\\MiddlewareInterface;\n\n/** @link https://www.php-fig.org/psr/psr-15/ */\nclass Middleware implements MiddlewareInterface\n{\n    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface\n    {\n        // return ResponseInterface or handle next request\n        return $handler-\u003ehandle($request);\n    }\n}\n\n$router-\u003eadd('GET', '/user/:id', ['controller', 'method'])\n    -\u003emiddleware('middleware'); // from container\n```\n\n### Groups\n```php\n\u003c?php\n\n$router-\u003egroup('api', function ($router) { // prefix of api\n\n    $router-\u003eadd('GET', '/', ['controller', 'method']); // pattern: /api\n\n    $router-\u003egroup('user', function ($router) {\n        $router-\u003eadd('GET', '/:id', ['controller', 'method']); // pattern: /api/user/:id\n    })-\u003emiddleware('middleware');\n\n})-\u003emiddleware('middleware'); // counts for every route inside\n\n```\n\n### After call\n```php\n\u003c?php\n\n$router-\u003eadd('GET', '/', ['controller', 'method'])\n    -\u003eafter(function ($reqest, $args, $response): void {})\n    -\u003eafter(['class', 'method'])\n    -\u003eafter('function');\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmorphable%2Fmicro","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmorphable%2Fmicro","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmorphable%2Fmicro/lists"}