Source for file Router.php

Documentation is available at Router.php

  1. <?php
  2. /**
  3.  * This application is free software; you can redistribute
  4.  * it and/or modify it under the terms of the GNU
  5.  * General Public License as published by the Free
  6.  * Software Foundation; either version 3 of the License,
  7.  * or (at your option) any later version.
  8.  * 
  9.  * This application is distributed in the hope that it will
  10.  * be useful, but WITHOUT ANY WARRANTY; without even the
  11.  * implied warranty of MERCHANTABILITY or FITNESS FOR A
  12.  * PARTICULAR PURPOSE.  See the GNU General Public
  13.  * License for more details.
  14.  *
  15.  *
  16.  * @author Andrew Judd <contact@andrewjudd.ca>
  17.  * @copyright Andrew Judd, 2010
  18.  * @license http://www.gnu.org/licenses/gpl-3.0.txt GPLv3
  19.  *
  20.  * @project Mini MVC
  21.  * @name system/helpers/Router.php
  22.  * @description This class is used in order to work on the routing of a page
  23.  *               to the correct location according to the specified uri.
  24.  */
  25.  
  26. /* Check if attempting for direct access */
  27. if !defined '__FULLPATH__' ) )
  28. {
  29.     die header 'HTTP/1.0 404 Not Found' ) );
  30. }
  31.  
  32. class Router extends Base
  33. {
  34.     /**
  35.      * The class which will be instantiated and have a method called on it.
  36.      */
  37.     private static $class __DEFAULTCLASS__;
  38.  
  39.     /**
  40.      * The function within the specified class which will be called to display
  41.      * the page's information.
  42.      */
  43.     private static $function __DEFAULTFUNCTION__;
  44.  
  45.     /**
  46.      * This function is used in order to set the information about the route
  47.      * which the user will be taking.  The route is describe by two things:
  48.      * <ul>
  49.      *      <li>Class name (first parameter)</li>
  50.      *      <li>Function name (second parameter)</li>
  51.      * </ul>
  52.      * Any other values which are included in the URL will be included as a
  53.      * function parameter for the specified function.  These parameters will
  54.      * always be passed into the controller function based on the order which
  55.      * they come in the URI.
  56.      */
  57.     public static function __setRoute ()
  58.     {
  59.         /* See if a class and function have been requested. */
  60.         if isset Base::$uri ) )
  61.         {
  62.             /* Set the class name */
  63.             Router::$class strtolower Base::$uri );
  64.  
  65.             /* See if the function has been set */
  66.             if isset Base::$uri ) )
  67.             {
  68.                 /* It hasn't been assigned, so default the function to the main */
  69.                 Router::$function strtolower Base::$uri );
  70.             }
  71.         }
  72.  
  73.         /* 
  74.          * Now that we have what was originally requested for routes, load any
  75.          * extra parameters. (i.e. URI and $_GET)
  76.          */
  77.         $max count Base::$uri );
  78.  
  79.         /* If there are more than two, we will add it to our list */
  80.         for $x 2$x $max++$x )
  81.         {
  82.             /* Load in directly and then remove from URI */
  83.             Router::$arguments [Base::$uri $x ];
  84.             unset Base::$uri $x );
  85.         }
  86.     }
  87.  
  88.     /**
  89.      * This function completes the actual routing of the data to the
  90.      * corresponding page on the web site.
  91.      */
  92.     public static function __route ()
  93.     {
  94.         $class NULL;
  95.  
  96.         /* Try to load the controller */
  97.         if Base::__loadController Router::$class ) )
  98.         {
  99.             /* There was an issue loading, so load the error controller */
  100.             /* Log the error */
  101.             Base::$errors [sprintf Base::$errorMessages
  102.                'invalidcontroller' ]Router::$class );
  103.  
  104.             /* Update the class and function */
  105.             Router::$class __ERRORCONTROLLER__;
  106.             Router::$function __ERRORFUNCTION__;
  107.  
  108.             /* Load the error controller */
  109.             Base::__loadController Router::$class );
  110.         }
  111.  
  112.         /* Append the _controller to it */
  113.         Router::$class .= 'Controller';
  114.  
  115.         /* Instantiate the class */
  116.         $class new Router::$class ();
  117.  
  118.         /* Check if the function exists */
  119.         if method_exists $classRouter::$function ) )
  120.         {
  121.             Base::$errors [sprintf Base::$errorMessages
  122.                 'invalidcontrollermethod' ]Router::$function,
  123.                 Router::$class );
  124.  
  125.             unset $class );
  126.  
  127.             /* There was a problem with the specified class (invalid function) */
  128.             Base::__loadController __ERRORCONTROLLER__ );
  129.  
  130.             Router::$class __ERRORCONTROLLER__ 'Controller';
  131.             Router::$function __ERRORFUNCTION__;
  132.  
  133.             $class new Router::$class ();
  134.  
  135.             /* Make sure the function exists */
  136.             if method_exists $classRouter::$function ) )
  137.             {
  138.                 /* It doesn't, so page is 404 */
  139.                 die header 'HTTP/1.0 404 Not Found' ) );
  140.             }
  141.         }
  142.  
  143.         /* Call the function with the arguments as previously defined */
  144.         call_user_func_array array $classRouter::$function ),
  145.             Router::$arguments );
  146.     }
  147. }

Documentation generated on Thu, 01 Jul 2010 20:37:18 -0400 by phpDocumentor 1.4.3