/** * Détermine le Controller, l'action ainsi que les paramètres en fonction de la requête * @param string $uri La requête * @return array */ public static function buildFromURI($uri) { $uri = explode('/', $uri); array_shift($uri); // Pour ne pas avoir un paramètre vide (quand un "/" est en fin d'URL) if (empty($uri[count($uri) - 1])) { unset($uri[count($uri) - 1]); } $controller = empty($uri[0]) ? 'pages' : $uri[0]; $action = empty($uri[1]) ? null : $uri[1]; $params = empty($uri[2]) ? null : array_slice($uri, 2, count($uri)); return Route::build($controller, $action, $params); }
<a href="<?php // Turn on sef urls in config.php to make use of this echo Route::build('home/second_page/', 'second-page'); ?> "> Second page </a>
public function testWith2Params() { $route = new Route("/{lang}/view/{slug}"); $this->assertEquals("/en/view/test", $route->build(array("lang" => "en", "slug" => "test"))); $this->assertFalse($route->build(array("slug" => "test"))); $this->assertFalse($route->build(array("lang" => "en"))); $this->assertFalse($route->build()); $route = new Route("/{lang}/view/{slug}", array("lang" => "")); $this->assertEquals("/en/view/test", $route->build(array("lang" => "en", "slug" => "test"))); $this->assertEquals("/view/test", $route->build(array("slug" => "test"))); $this->assertFalse($route->build(array("lang" => "en"))); $this->assertFalse($route->build()); $route = new Route("/{lang}/view/{slug}", array("lang" => "en")); $this->assertEquals("/view/test", $route->build(array("lang" => "en", "slug" => "test"))); $this->assertEquals("/bg/view/test", $route->build(array("lang" => "bg", "slug" => "test"))); $this->assertEquals("/view/test", $route->build(array("slug" => "test"))); $this->assertFalse($route->build(array("lang" => "en"))); $this->assertFalse($route->build()); $route = new Route("/{lang}/view/{slug}", array("slug" => "")); $this->assertEquals("/en/view/test", $route->build(array("lang" => "en", "slug" => "test"))); $this->assertEquals("/en/view", $route->build(array("lang" => "en"))); $this->assertEquals("/en/view", $route->build(array("lang" => "en", "slug" => ""))); $this->assertFalse($route->build(array("slug" => "test"))); $this->assertFalse($route->build()); $route = new Route("/{lang}/view/{slug}", array("slug" => "foo")); $this->assertEquals("/en/view/test", $route->build(array("lang" => "en", "slug" => "test"))); $this->assertEquals("/en/view", $route->build(array("lang" => "en"))); $this->assertEquals("/en/view", $route->build(array("lang" => "en", "slug" => "foo"))); $this->assertEquals("/en/view", $route->build(array("lang" => "en", "slug" => ""))); $this->assertFalse($route->build(array("slug" => "test"))); $this->assertFalse($route->build(array("slug" => "foo"))); $this->assertFalse($route->build()); $route = new Route("/{lang}/view/{slug}", array("slug" => "foo", "lang" => "en")); $this->assertEquals("/view/test", $route->build(array("lang" => "en", "slug" => "test"))); $this->assertEquals("/bg/view/test", $route->build(array("lang" => "bg", "slug" => "test"))); $this->assertEquals("/view", $route->build(array("lang" => "en"))); $this->assertEquals("/view", $route->build(array("lang" => "en", "slug" => "foo"))); $this->assertEquals("/view", $route->build(array("lang" => "en", "slug" => ""))); $this->assertEquals("/view", $route->build(array("lang" => "en"))); $this->assertEquals("/view", $route->build(array("lang" => "en", "slug" => "foo"))); $this->assertEquals("/view", $route->build(array("lang" => "en", "slug" => ""))); }
/** * Implements RouteInterface::build() method * {@inheritdoc} * * @param string Which parts of the path should be used: PATH_ONLY, PATH_FULL, PATH_NETWORK */ public function build(array $parameters = array(), $pathType = self::PATH_AUTO) { $path = parent::build($parameters, $pathType); if ($pathType == self::PATH_AUTO) { if (!empty($parameters["_host"])) { if (!empty($parameters["_scheme"])) { $pathType = self::PATH_FULL; } else { $pathType = self::PATH_NETWORK; } } else { $pathType = self::PATH_ONLY; } } if ($pathType == self::PATH_NETWORK || $pathType == self::PATH_FULL) { if (isset($parameters["_host"])) { $path = "//" . $parameters["_host"] . $path; if ($pathType == self::PATH_FULL) { $scheme = isset($parameters["_scheme"]) ? $scheme = $parameters["_scheme"] : ($scheme = $this->getScheme()); if ($scheme) { $path = $scheme . ":" . $path; } } } } return $path; }