{"id":26442728,"url":"https://github.com/ahmard/quick-route","last_synced_at":"2025-03-18T10:29:57.437Z","repository":{"id":44220503,"uuid":"307528059","full_name":"Ahmard/quick-route","owner":"Ahmard","description":"Simple http router designed to look just like Laravel's router","archived":false,"fork":false,"pushed_at":"2022-02-11T00:36:12.000Z","size":276,"stargazers_count":11,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-15T16:36:50.673Z","etag":null,"topics":["fast-route","http-router","laravel","php","quick-route","quickroute","router","routing"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Ahmard.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-10-26T23:10:37.000Z","updated_at":"2023-09-04T23:10:27.000Z","dependencies_parsed_at":"2022-08-21T02:10:25.710Z","dependency_job_id":null,"html_url":"https://github.com/Ahmard/quick-route","commit_stats":null,"previous_names":[],"tags_count":46,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ahmard%2Fquick-route","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ahmard%2Fquick-route/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ahmard%2Fquick-route/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ahmard%2Fquick-route/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ahmard","download_url":"https://codeload.github.com/Ahmard/quick-route/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244201487,"owners_count":20415087,"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":["fast-route","http-router","laravel","php","quick-route","quickroute","router","routing"],"created_at":"2025-03-18T10:29:56.699Z","updated_at":"2025-03-18T10:29:57.417Z","avatar_url":"https://github.com/Ahmard.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# QuickRoute\nAn elegant http router built on top of [FastRoute](https://github.com/nikic/FastRoute) to provide more easy of use.\n\n## Upgrade Guide\nCheck [ChangeLog](CHANGELOG.md) file\n\n## Installation\n```bash\ncomposer require ahmard/quick-route\n```\n\n## Usage\n\nSimple example\n\n```php\nuse QuickRoute\\Route;\nuse QuickRoute\\Router\\Dispatcher;\n\nrequire('vendor/autoload.php');\n\nRoute::get('/', function () {\n    echo 'Hello world';\n});\n\n$method = $_SERVER['REQUEST_METHOD'];\n$path = $_SERVER['REQUEST_URI'];\n\n//create route dispatcher\n$dispatcher = Dispatcher::collectRoutes()\n    -\u003edispatch($method, $path);\n\n//determine dispatch result\nswitch (true) {\n    case $dispatcher-\u003eisFound():\n        $controller = $dispatcher-\u003egetRoute()-\u003egetController();\n        $controller($dispatcher-\u003egetUrlParameters());\n        break;\n    case $dispatcher-\u003eisNotFound():\n        echo \"Page not found\";\n        break;\n    case $dispatcher-\u003eisMethodNotAllowed():\n        echo \"Request method not allowed\";\n        break;\n}\n```\n\n#### Controller-like example\n\n```php\nuse QuickRoute\\Route;\n\nRoute::get('/home', 'MainController@home');\n```\n\n#### Advance usage\n\n```php\nuse QuickRoute\\Route;\n\nRoute::prefix('user')-\u003ename('user.')\n    -\u003enamespace('User')\n    -\u003emiddleware('UserMiddleware')\n    -\u003egroup(function (){\n        Route::get('profile', 'UserController@profile');\n        Route::put('update', 'UserController@update');\n    });\n```\n\n#### More Advance Usage\n\n```php\nuse QuickRoute\\Route;\n\nRoute::prefix('user')\n    -\u003eprepend('api')\n    -\u003eappend('{token}')\n    -\u003emiddleware('UserMiddleware')\n    -\u003egroup(function (){\n        Route::get('profile', 'UserController@profile');\n        Route::put('update', 'UserController@update');\n    });\n\n// =\u003e /api/user/{token}\n```\n\n#### Defining route param types\n```php\nuse QuickRoute\\Route;\n\n// id =\u003e must be number\nRoute::get('users/{id}', 'Controller@index')-\u003ewhereNumber('id');\n// name =\u003e must be alphabetic\nRoute::get('users/{name}', 'Controller@profile')-\u003ewhereAlpha('name');\n// username =\u003e must be alphanumeric\nRoute::get('users/{username}', 'Controller@profile')-\u003ewhereAlphaNumeric('username');\n\n// Manually provide regular expression pattern to match parameter with\nRoute::get('/users/{id}', 'a')-\u003ewhere('id', '[0-9]+');\nRoute::get('/users/{user}/posts/{post}', 'Ctrl@method')-\u003ewhere([\n    'user' =\u003e '[a-zA-Z]+',\n    'post' =\u003e '[0-9]+'\n]);\n```\n\n#### Route Fields\nFields help to add more description to route or group of routes\n\n```php\nuse QuickRoute\\Route;\n\nRoute::prefix('user')\n    -\u003emiddleware('User')\n    -\u003eaddField('specie', 'human')\n    -\u003egroup(function (){\n        Route::get('type', 'admin')-\u003eaddField('permissions', 'all');\n        Route::get('g', fn() =\u003e print('Hello world'));\n    });\n\n```\n\n#### Route::match()\n```php\nuse QuickRoute\\Route;\nuse QuickRoute\\Router\\Collector;\nuse QuickRoute\\Router\\Dispatcher;\n\nrequire 'vendor/autoload.php';\n\n$controller = fn() =\u003e print time();\nRoute::match(['get', 'post'], '/user', $controller)\n    -\u003emiddleware('auth')\n    -\u003enamespace('App')\n    -\u003ename('home');\n\n$collector = Collector::create()-\u003ecollect();\n\n$dispatchResult = Dispatcher::create($collector)\n    -\u003edispatch('get', '/user/hello');\n\nvar_export($dispatchResult-\u003egetRoute());\n```\n\n#### Route::match() with named routes\n```php\nuse QuickRoute\\Route;\n\nRoute::match(['get', 'post'], 'login', 'AuthController@login')-\u003ename('login.');\n\n//Will generate below routes\nRoute::get('login', 'AuthController@login')-\u003ename('login.get');\nRoute::post('login', 'AuthController@login')-\u003ename('login.post');\n```\n\n#### Route::any()\n\n```php\nuse QuickRoute\\Route;\nuse QuickRoute\\Router\\Collector;\nuse QuickRoute\\Router\\Dispatcher;\n\n$controller = fn() =\u003e print time();\n\nRoute::any(['/login', '/admin/login'], 'get', $controller);\n\n$collector = Collector::create()-\u003ecollect();\n\n$dispatchResult1 = Dispatcher::create($collector)\n    -\u003edispatch('get', '/login');\n    \n$dispatchResult2 = Dispatcher::create($collector)\n    -\u003edispatch('get', '/admin/login');\n```\n\n#### Route::matchAny()\n\n```php\nuse QuickRoute\\Route;\n\nRoute::matchAny(\n    ['get', 'post'], \n    ['/customer/login', '/admin/login'],\n    'MainController@index'\n);\n\n//Which is equivalent to:\nRoute::get('/customer/login', 'MainController@index');\nRoute::post('/customer/login', 'MainController@index');\nRoute::get('/admin/login', 'MainController@index');\nRoute::post('/admin/login', 'MainController@index');\n```\n\n#### Route::resource()\n\n```php\nuse QuickRoute\\Route;\n\nRoute::resource('photos', 'App\\Http\\Controller\\PhotoController');\n```\nCode above will produce below routes \u003cbr/\u003e\n![alt text](resource-http-verbs.png)\n\n#### Crud::create()\n\n```php\nuse QuickRoute\\Crud;\n\nCrud::create('/', 'Controller')-\u003ego();\n```\nCode above will produce below routes \u003cbr/\u003e\n![alt text](crud-definition.png)\n\u003cbr/\u003e\n**Why not use Route::resource()?**\u003cbr/\u003e\nCrud creator generates 6 routes, one of the routes which deletes all record in the endpoint.\u003cbr/\u003e\nWith Crud creator you can choose which routes to create or not.\n\n```php\nuse QuickRoute\\Crud;\n\n//Disabling route creation\nCrud::create('/', 'Controller')\n    -\u003edisableIndexRoute()\n    -\u003edisableStoreRoute()\n    -\u003edisableDestroyAllRoute()\n    -\u003edisableShowRoute()\n    -\u003edisableUpdateRoute()\n    -\u003edisableDestroyRoute()\n    -\u003ego();\n\n//Specifying custom route parameter name \nCrud::create('/', 'Controller')-\u003eparameter('userId');\n\n//Specify parameter type \nCrud::create('/', 'Controller')-\u003enumericParameter();\nCrud::create('/', 'Controller')-\u003ealphabeticParameter();\nCrud::create('/', 'Controller')-\u003ealphaNumericParameter();\n```\n\n#### Routes as configuration\n\n```php\n//routes.php\nuse QuickRoute\\Route;\n\nRoute::get('/', 'MainController@index');\nRoute::get('/help', 'MainController@help');\n\n\n//server.php\nuse QuickRoute\\Router\\Collector;\n\n$collector = Collector::create()\n    -\u003ecollectFile('routes.php')\n    -\u003eregister();\n\n$routes = $collector-\u003egetCollectedRoutes();\n```\n\n#### Caching\nCache routes so that they don't have to be collected every time.\n\n```php\nuse QuickRoute\\Router\\Collector;\n\n$collector = Collector::create()\n    -\u003ecollectFile('routes.php')\n    -\u003ecache('path/to/save/cache.php', false)\n    -\u003eregister();\n\n$routes = $collector-\u003egetCollectedRoutes();\n```\n\nCaching routes with closure\n\n```php\nuse QuickRoute\\Route;\nuse QuickRoute\\Router\\Collector;\n\nRoute::get('/', function (){\n    echo uniqid();\n});\n\n$collector = Collector::create()\n    -\u003ecollect()\n    -\u003ecache('path/to/save/cache.php', true)\n    -\u003eregister();\n\n$routes = $collector-\u003egetCollectedRoutes();\n```\n**Note that you must specify that your routes contains closure**\n\n\n#### Passing Default Data\nYou can alternatively pass data to be prepended to all routes.\n\u003cbr/\u003e\nCached routes must be cleared manually after setting/updating default route data.\n\n```php\nuse QuickRoute\\Router\\Collector;\n\n$collector = Collector::create();\n$collector-\u003ecollectFile('api-routes.php', [\n    'prefix' =\u003e 'api',\n    'name' =\u003e 'api.',\n    'namespace' =\u003e 'Api\\\\'\n]);\n$collector-\u003eregister();\n```\n\n#### Changing Delimiter\nFor usage outside of web context, a function to change default delimiter which is \"**/**\" has been provided.\n\n```php\nuse QuickRoute\\Route;\nuse QuickRoute\\Router\\Collector;\nuse QuickRoute\\Router\\Dispatcher;\n\nrequire 'vendor/autoload.php';\n\nRoute::prefix('hello')\n    -\u003egroup(function () {\n        Route::get('world', fn() =\u003e print('Hello World'));\n    });\n\n$collector = Collector::create()\n    -\u003eprefixDelimiter('.')\n    -\u003ecollect()\n    -\u003eregister();\n\n$dispatchResult = Dispatcher::create($collector)\n    -\u003edispatch('get', 'hello.world');\n\nvar_export($dispatchResult);\n```\n\n#### Finding route \u0026 generating route uri\n\n```php\nuse QuickRoute\\Route;\nuse QuickRoute\\Router\\Collector;\n\nRoute::get('/users', 'Controller@method')-\u003ename('users.index');\n\n$collector = Collector::create()-\u003ecollect();\necho $collector-\u003euri('users.index');  // =\u003e /users\n$collector-\u003eroute('users.index'); // =\u003e Instance of QuickRoute\\Route\\RouteData\n```\n\n#### Note\n- You must be careful when using **Collector::collect()** and **Collector::collectFile()** together, \nas collectFile method will clear previously collected routes before it starts collecting.\u003cbr/\u003e\nMake sure that you call **Collector::collect()** first, before calling **Collector::collectFile()**.\n\n\n## Licence\n_Route http verbs image is owned by [Riptutorial](https://riptutorial.com)_.\n\n**QuickRoute** is **MIT** licenced.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fahmard%2Fquick-route","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fahmard%2Fquick-route","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fahmard%2Fquick-route/lists"}