Skip to content

Instantly share code, notes, and snippets.

@iantearle
Created May 28, 2014 07:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save iantearle/ba2a82d24fe3dc9daa23 to your computer and use it in GitHub Desktop.
Save iantearle/ba2a82d24fe3dc9daa23 to your computer and use it in GitHub Desktop.
PHP Routes Class
<?php
/**
* Routes class.
* Copyright Ian Tearle (c) 2014
*
* This is free and unencumbered software released into the public domain.
*
* Anyone is free to copy, modify, publish, use, compile, sell, or
* distribute this software, either in source code form or as a compiled
* binary, for any purpose, commercial or non-commercial, and by any
* means.
*
* In jurisdictions that recognize copyright laws, the author or authors
* of this software dedicate any and all copyright interest in the
* software to the public domain. We make this dedication for the benefit
* of the public at large and to the detriment of our heirs and
* successors. We intend this dedication to be an overt act of
* relinquishment in perpetuity of all present and future rights to this
* software under copyright law.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*
* For more information, please refer to <http://unlicense.org/>
*
*
* HOW TO
* ======
* $routes = new Routes('http://localhost/routes/');
*
* if($routes->matchPath('some/stuff')) {
* $routes->getPath() = Array ( [0] => some [1] => stuff )
* }
*
* if($routes->matchPath('something')) {
* $routes->getPath() = Array ( [0] => something )
* }
*/
class Routes {
private $path;
/**
* __construct function.
*
* @access public
* @param mixed $url
* @return void
*/
public function __construct($url) {
if($url === null) {
$url = $_SERVER['REQUEST_URI'];
$url = explode('/', $url);
$url = array_filter($url);
$url = array_merge($url, array());
$this->url = $url;
} else {
$ignore = parse_url($url);
$ignore = $ignore['path'];
$ignore = explode('/', $ignore);
$ignore = array_filter($ignore);
$ignore = array_merge($ignore, array());
$request = $_SERVER['REQUEST_URI'];
$request = explode('/', $request);
$request = array_filter($request);
$request = array_merge($request, array());
if(($key = array_search($ignore, $request)) == false) {
unset($request[$key]);
}
$this->path = array_values($request);
}
}
/**
* getPath function.
*
* @access public
* @return void
*/
public function getPath() {
return $this->path;
}
/**
* matchPath function.
*
* @access public
* @param mixed $string
* @return void
*/
public function matchPath($string) {
$array = explode('/', $string);
$difference = array_diff($this->path, $array);
if(empty($difference)) {
return true;
}
http_response_code(404);
return false;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment