(Yaf >=1.0.0)
Yaf_Route_Interface::route — Route une requête
Yaf_Route_Interface::route() est la seule méthode qu'une route personnalisée devrait implémenter.
Note:
À partir de la version 2.3.0, une autre méthode devrait également être implémentée, voir Yaf_Route_Interface::assemble().
Si cette méthode retourne true, alors le processus de routage se
terminera. Sinon, Yaf_Router appellera la route
suivante dans la pile des routes pour router la requête.
Cette méthode devrait affecter le résultat du routage au paramètre request, en appelant Yaf_Request_Abstract::setControllerName(), Yaf_Request_Abstract::setActionName() et Yaf_Request_Abstract::setModuleName().
Cette méthode devrait également appeler Yaf_Request_Abstract::setRouted() pour marquer la requête comme routée en dernier lieu.
requestUne instance de Yaf_Request_Abstract.
Exemple #1 Exemple avec Yaf_Route_Interface::route()
<?php
class ApiRoute implements Yaf_Route_Interface {
private $_prefix;
public function __construct(string $prefix) {
$this->_prefix = $prefix;
}
public function route(Yaf_Request_Abstract $request): bool {
$uri = $request->getRequestUri();
if (0 !== strpos($uri, $this->_prefix)) {
/* cela ne nous concerne pas, le routeur essaiera la route suivante */
return false;
}
/* analyse l'URI "/api/user/list" en contrôleur/action */
$segments = explode("/", ltrim(substr($uri, strlen($this->_prefix)), "/"));
$controller = isset($segments[0]) ? ucfirst($segments[0]) : NULL;
$action = isset($segments[1]) ? $segments[1] : NULL;
if (empty($controller)) {
return false;
}
$request->setModuleName("index");
$request->setControllerName($controller);
$request->setActionName($action);
$request->setRouted(); /* le processus de routage se termine ici */
return true;
}
public function assemble(array $info, ?array $query = null): string {
$uri = $this->_prefix . "/" . strtolower($info[':c']);
if (isset($info[':a'])) {
$uri .= "/" . $info[':a'];
}
if (!empty($query)) {
$uri .= "?" . http_build_query($query);
}
return $uri;
}
}
/**
* enregistre la route personnalisée
*/
Yaf_Dispatcher::getInstance()->getRouter()->addRoute("api", new ApiRoute("/api"));
?>Résultat de l'exemple ci-dessus est similaire à :
/* http://yourdomain.com/api/user/list * est routée vers les valeurs suivantes : */ array( "module" => "index", "controller" => "User", "action" => "list", )