(Yaf >=2.3.0)
Yaf_Route_Interface::assemble — Assemble une requête
Cette méthode retourne une URL suivant les informations de l'argument info, et ajoute les chaînes de requête à l'URL suivant l'argument query.
Une route devrait implémenter cette méthode suivant ses propres règles de routage, et effectuer le traitement inverse.
info
query
Exemple #1 Exemple avec Yaf_Route_Interface::assemble()
<?php
class RewriteRoute implements Yaf_Route_Interface {
private $_match;
private $_route;
public function __construct(string $match, array $route) {
$this->_match = $match;
$this->_route = $route;
}
public function route(Yaf_Request_Abstract $request): bool {
if (!preg_match($this->_match, $request->getRequestUri(), $matches)) {
return false;
}
foreach ($this->_route as $key => $value) {
if (is_string($value) && ':' === $value[0]) {
$value = $matches[substr($value, 1)];
}
$request->setParam($key, $value);
}
$request->setRouted();
return true;
}
/* applique les règles de routage en sens inverse pour reconstruire une URL */
public function assemble(array $info, ?array $query = null): string {
$url = "/product";
if (isset($info[':name'])) {
$url .= "/" . $info[':name'];
}
if (!empty($query)) {
$url .= "?" . http_build_query($query);
}
return $url;
}
}
$router = new Yaf_Router();
$router->addRoute("custom",
new RewriteRoute("#^/product#", array("controller" => "product"))
);
var_dump($router->getRoute("custom")->assemble(
array(':name' => 'book'),
array('page' => 2)
));
?>Résultat de l'exemple ci-dessus est similaire à :
string(20) "/product/book?page=2"