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();
//...
}
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:
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 objetoRouteMatch
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.