A free and open-source book on ZF3 for beginners

Translation into this language is not yet finished. You can help this project by translating the chapters and contributing your changes.

5.9. Extraer Parámetros desde la Ruta

Cuando una ruta coincide el router (la clase route de primer nivel) regresa algunos parámetros: los "defaults" (parámetros listados en la sección defaults de la configuración del routing) más cualquier otro parámetro comodín extraído de la URL.

En nuestro controlador necesitaremos a menudo recuperar estos parámetros. Nosotros ya hicimos esto en los ejemplos de arriba. En esta sección daremós un resumen.

Para recuperar un parámetro de la ruta desde nuestro método de acción en el controlador típicamente usamos el controlador complementario Params y su método fromRoute(), que toma dos argumentos: el nombre del parámetro a recuperar y el valor a regresar si el parámetro no esta presente.

Además, el método fromRoute() se puede usar para recuperar todos los parámetros en un solo arreglo. Para hacer esto llamamos al método fromRoute() sin argumentos como se muestra en el ejemplo de abajo:

// An example action.
public function someAction()
{
    // Get the single 'id' parameter from route.
    $id = $this->params()->fromRoute('id', -1);

    // Get all route parameters at once as an array.
    $params = $this->params()->fromRoute();

    //...
}

5.9.1. Recuperar la RouteMatch y el Router Object

Cuando una ruta coincide, la clase router crea internamente una instancia de la clase Zend\Router\RouteMatch que provee los métodos para extraer el nombre de la ruta coincidente y los parámetros extraídos de la ruta. Los métodos útiles de la clase RouteMatch se listan en la tabla 5.3:

Tabla 5.3. Métodos de la clase Zend\Router\RouteMatch
Nombre del Método Descripción
getMatchedRouteName() Trae el nombre de la ruta coincidente.
getParams() Trae todos los parámetros.
getParam($name, $default) Trae un parámetro específico.

En la mayoría de los casos, será suficiente usar el controlador complementario Params, pero alternativamente podemos usar el objeto RouteMatch para lograr la misma tarea.

Para traer el objeto RouteMatch desde nuestro método de acción en el controlador podemos usar el siguiente código:

// An example action.
public function someAction()
{
    // Get the RouteMatch object.
    $routeMatch = $this->getEvent()->getRouteMatch();

    // Get matched route's name.
    $routeName = $routeMatch->getMatchedRouteName();

    // Get all route parameters at once as an array.
    $params = $routeMatch->getParams();

    //...
}

En la línea 5 del código de arriba usamos el método getEvent() de la clase base AbstractActionController para recuperar el objeto MvcEvent que representa el evento (en ZF3 el ciclo de vida de la aplicación consiste en eventos). Nosotros usamos el método getRouteMatch() de la clase MvcEvent para recuperar el objeto RouteMatch.

En la línea 8 usamos el método getMatchedRouteName() para recuperar el nombre de la ruta que coincidió con la petición HTTP y en la línea 11 recuperamos todos los parámetros de la ruta.

Además, la clase MvcEvent se puede usar para recuperar la ruta (la clase ruta de primer nivel). Podemos hacer esto con el método getRouter() de la clase MvcEvent, como se muestra más abajo:

    // Call this inside of your action method
    // to retrieve the RouteStackInterface for the router class.
    $router = $this->getEvent()->getRouter();

En el código de arriba usamos el método getRouter() que regresa la interface RouteStackInterface. Esta interface es la interface base tanto para SimpleRouteStack como para TreeRouteStack y provee los métodos para trabajar con las rutas contenidas dentro de la pila de rutas.


Top