Skip to content

Instantly share code, notes, and snippets.

@gemmadlou
Created March 3, 2017 11:02
Show Gist options
  • Select an option

  • Save gemmadlou/5e19df11c8f00556d98f88d055d53478 to your computer and use it in GitHub Desktop.

Select an option

Save gemmadlou/5e19df11c8f00556d98f88d055d53478 to your computer and use it in GitHub Desktop.
PHP Router
<?php
class Route
{
private $server;
private $get;
private $post;
public static function init(array $server, array $get, array $post)
{
return new self($server, $get, $post);
}
private function __construct(array $server, array $get, array $post)
{
$this->server = $server;
$this->get = $get;
$this->post = $post;
}
public function get($route, callable $func)
{
list($args, $routes) = self::getURLArgs(
self::getURIAsArray($route),
self::getServerURIArray($_SERVER)
);
if (!empty($args) && !empty($routes)) {
echo call_user_func_array($func, [$args]);
exit;
}
}
private function getURLArgs($routeArray, $serverRouteArray)
{
$args = [];
$routes = [];
for ($i = 0; $i < count($routeArray); $i++) {
$routeSegment = $routeArray[$i];
$serverSegment = $serverRouteArray[$i];
if (isset($routeSegment) && isset($serverSegment)
&& self::isRouteVariable($routeSegment)
&& count($routeArray) === count($serverRouteArray)
&& !empty($serverSegment)) {
$args[self::getPlaceholderFromString($routeSegment)] = $serverSegment;
continue;
}
if (isset($routeSegment) && isset($serverSegment)
&& self::areEqualValues($routeSegment, $serverSegment)) {
$routes[$routeSegment] = $serverSegment;
continue;
}
unset($args);
unset($routes);
break;
}
return [$args, $routes];
}
private function getArgs()
{}
private function areEqualValues($serverSegment, $routeSegment)
{
return $serverSegment === $routeSegment;
}
private function getPlaceholderFromString($string)
{
return str_replace(':', '', $string);
}
private function isRouteVariable($string) {
return strpos($string, ':') > -1;
}
private function getServerURIArray(array $server)
{
return self::getURIAsArray(self::getRequestURI($server));
}
private function getRequestURI(array $server)
{
return explode('?', $server['REQUEST_URI'])[0];
}
private function getURIAsArray($uri)
{
$array = explode('/', $uri);
array_shift($array);
return $array;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment