From 80bfe096b826152b131b43ff87e027f71a9a466b Mon Sep 17 00:00:00 2001 From: Chris Date: Thu, 31 Jan 2019 10:54:07 +0100 Subject: [PATCH] Added handling for case and trailing slashes --- README.md | 5 +++++ Route.php | 16 ++++++++++------ index.php | 19 +++++++++++++++++++ 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index ec8efbc..c0dfa67 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,11 @@ If your script lives in a subfolder e.g. /api/v1 set this basepath in your run m Do not forget to edit the basepath in .htaccess too if you are on Apache2. In order to run the test files correctly inside a basepath you should also adjust the navigation links inside the index.php. +## Enable case sensitive routes and trailing slashes +The second and third parameters of ```Route::run('/', false, false);``` are both set to false by default. +You can enable case sensitive mode by setting the second parameter to true. +By default the router will ignore trailing slashes. Set the third parameter to true to avoid this. + ## Something does not work? * Dont forget to set the correct basepath as argument in your run method and in your .htaccess file. * Enable mod_rewrite in your Apache2 settings diff --git a/Route.php b/Route.php index dfd91ec..cc45729 100644 --- a/Route.php +++ b/Route.php @@ -22,13 +22,17 @@ class Route{ self::$methodNotAllowed = $function; } - public static function run($basepath = '/'){ + public static function run($basepath = '/', $case_matters = false, $trailing_slash_matters = false){ // Parse current url $parsed_url = parse_url($_SERVER['REQUEST_URI']);//Parse Uri - if(isset($parsed_url['path'])){ - $path = $parsed_url['path']; + if(isset($parsed_url['path']) && $parsed_url['path'] != '/'){ + if($trailing_slash_matters){ + $path = $parsed_url['path']; + }else{ + $path = rtrim($parsed_url['path'], '/'); + } }else{ $path = '/'; } @@ -56,9 +60,9 @@ class Route{ $route['expression'] = $route['expression'].'$'; // echo $route['expression'].'
'; - - // Check path match - if(preg_match('#'.$route['expression'].'#',$path,$matches)){ + + // Check path match + if(preg_match('#'.$route['expression'].'#'.($case_matters ? '':'i'),$path,$matches)){ $path_match_found = true; diff --git a/index.php b/index.php index 516f424..fa45240 100644 --- a/index.php +++ b/index.php @@ -12,6 +12,10 @@ function navi () {
  • long route example
  • contact form
  • test.html
  • +
  • aTrailingSlashDoesNotMatters
  • +
  • aTrailingSlashDoesNotMatters/
  • +
  • theCaseDoesNotMatters
  • +
  • thecasedoesnotmatters
  • 404 Test
  • 405 Test
  • @@ -86,6 +90,18 @@ Route::add('/foo/bar/foo/bar',function(){ echo 'This is the second match
    '; }); +// Trailing slash example +Route::add('/aTrailingSlashDoesNotMatters',function(){ + navi(); + echo 'a trailing slash does not matters
    '; +}); + +// Case example +Route::add('/theCaseDoesNotMatters',function(){ + navi(); + echo 'the case does not matters
    '; +}); + // 405 test Route::add('/this-route-is-defined',function(){ navi(); @@ -114,4 +130,7 @@ Route::run('/'); // Do not forget to edit the basepath in .htaccess if you are on apache // Route::run('/api/v1'); +// Enable case sensitive mode and trailing slashes by setting both to true +// Route::run('/', true, true); + ?> \ No newline at end of file