Yaf_Route_Interface::route

(Yaf >=1.0.0)

Yaf_Route_Interface::routeEnruta una petición

Descripción

abstract public function Yaf_Route_Interface::route(Yaf_Request_Abstract $request): bool

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.

Parámetros

request

Una instancia de la clase Yaf_Request_Abstract.

Valores devueltos

Ejemplos

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",
)

Véase también

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top