(Yaf >=1.0.0)
Yaf_Route_Interface::route — Enruta una petición
Yaf_Route_Interface::route() es el único método que debería implementar un enrutamiento personalizado.
Nota:
Desde la 2.3.0, hay otro método que también debería ser implementado, ver Yaf_Route_Interface::assemble().
Si este método devuelve true, el proceso de enrutamiento terminará, de otro modo
Yaf_Router llamará a la siguiente ruta de la pila de enrutamiento
para enrutar la petición.
Este método establecería el resultado del enrutamiento al parámetro request, llamando a los métodos Yaf_Request_Abstract::setControllerName(), Yaf_Request_Abstract::setActionName() y Yaf_Request_Abstract::setModuleName().
Este método debería también llamar al método Yaf_Request_Abstract::setRouted() para realizar al fin la petición enrutada.
requestUna instancia de la clase Yaf_Request_Abstract.
Ejemplo #1 Ejemplo de 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)) {
/* no es cosa nuestra, que el enrutador pruebe la siguiente ruta */
return false;
}
/* analiza el URI "/api/user/list" en controlador/acción */
$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(); /* el proceso de enrutamiento termina aquí */
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;
}
}
/**
* se registra la ruta personalizada
*/
Yaf_Dispatcher::getInstance()->getRouter()->addRoute("api", new ApiRoute("/api"));
?>Resultado del ejemplo anterior es similar a:
/* http://yourdomain.com/api/user/list * enruta a los siguientes valores: */ array( "module" => "index", "controller" => "User", "action" => "list", )