Skip to content

Instantly share code, notes, and snippets.

@iantearle
Created May 28, 2014 07:21
Show Gist options
  • Save iantearle/ba2a82d24fe3dc9daa23 to your computer and use it in GitHub Desktop.
Save iantearle/ba2a82d24fe3dc9daa23 to your computer and use it in GitHub Desktop.

Revisions

  1. iantearle renamed this gist May 28, 2014. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  2. iantearle created this gist May 28, 2014.
    140 changes: 140 additions & 0 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,140 @@
    <?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;

    }

    }