Buscar..
Introducción
Una ruta es como asignar una URL a una acción (función) en una clase de Controlador. El siguiente tema se centrará en la creación de rutas, pasando los parámetros a la clase Controller a través de una ruta, ya sea utilizando YAML o una anotación.
Observaciones
Es útil ver lo que genera Symfony Framework, este proporciona herramientas para ver todas las rutas de una aplicación específica.
Desde el Symfony Doc , use (en un shell):
php bin/console debug:router
Además, puede ver toda la información relevante de las rutas en el perfilador de Framework, en el menú de enrutamiento:
Enrutamiento utilizando YAML
La configuración de enrutamiento está incluida en su archivo app/config/config.yml
, por defecto el archivo app/config/routing.yml
.
Desde allí puede enlazar a su propia configuración de enrutamiento en un paquete
# app/config/routing.yml
app:
resource: "@AppBundle/Resources/config/routing.yml"
También puede contener varias rutas globales de aplicaciones.
En su propio paquete puede configurar rutas que sirven para dos propósitos:
- Coincidencia con una solicitud, de manera que se llame a la acción correcta para la solicitud.
- Generando una URL a partir de los parámetros de nombre y ruta.
A continuación se muestra un ejemplo de configuración de ruta YAML:
# src/AppBundle/Resources/config/routing.yml
my_page:
path: /application/content/page/{parameter}
defaults:
_controller: AppBundle:Default:myPage
parameter: 42
requirements:
parameter: '\d+'
methods: [ GET, PUT ]
condition: "request.headers.get('User-Agent') matches '/firefox/i'"
La ruta se llama my_page
y llama a myPageAction
del DefaultController
en AppBundle
cuando se solicita. Tiene un parámetro, denominado parameter
con un valor predeterminado. El valor solo es válido cuando coincide con la expresión regular \d+
. Para esta ruta, solo se aceptan los métodos HTTP GET
y PUT
. La condition
es una expresión en el ejemplo que la ruta no coincidirá a menos que el encabezado User-Agent coincida con firefox. Puedes hacer cualquier lógica compleja que necesites en la expresión aprovechando dos variables que se pasan a la expresión: context
(RequestContext) y request
(Symfony Request).
Una ruta generada con el valor del parámetro 10 podría verse como /application/content/page/10
.
Enrutamiento mediante anotaciones.
La configuración de enrutamiento está incluida en su archivo app/config/config.yml
, por defecto el archivo app/config/routing.yml
.
Desde allí puede enlazar a los controladores que tienen una configuración de enrutamiento anotada:
# app/config/routing.yml
app:
resource: "@AppBundle/Controller"
type: annotation
En su propio paquete puede configurar rutas que sirven para dos propósitos:
- Coincidencia con una solicitud, de manera que se llame a la acción correcta para la solicitud.
- Generando una URL a partir de los parámetros de nombre y ruta.
A continuación se muestra un ejemplo de configuración de ruta anotada:
// src/AppBundle/Controller/DefaultController.php
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
/**
* @Route("/application")
*/
class DefaultController extends Controller {
/**
* @Route("/content/page/{parameter}",
* name="my_page",
* requirements={"parameter" = "\d+"},
* defaults={"parameter" = 42})
* @Method({"GET", "PUT"})
*/
public function myPageAction($parameter)
{
// ...
}
}
El controlador está anotado con una ruta de prefijo , de manera que cualquier ruta configurada en este controlador se añadirá con el prefijo.
La ruta configurada se llama my_page
y llama a la función myPageAction
cuando se solicita. Tiene un parámetro, denominado parameter
con un valor predeterminado. El valor solo es válido cuando coincide con la expresión regular \d+
. Para esta ruta, solo se aceptan los métodos HTTP GET
y PUT
.
Observe que el parámetro se inyecta en la acción como un parámetro de función.
Una ruta generada con el valor del parámetro 10 podría verse como /application/content/page/10
.
Rutas de descanso de gran alcance
Tradicionalmente, puede usar el enrutamiento para asignar una solicitud con el Componente de enrutamiento que manejó los parámetros de solicitud y respuesta por el Componente de HttpFoundation .
Además, se puede crear un parámetro de ruta personalizado utilizando FOSRestBundle para extender las funcionalidades predeterminadas del Componente de enrutamiento.
Esto es útil para crear rutas REST, y es realmente útil para especificar cómo transferir datos estructurados como XML o json en una solicitud (y una respuesta).
Consulte FOSRestBundle Doc para obtener más información, y especialmente esta anotación:
use FOS\RestBundle\Controller\Annotations\FileParam;
/**
* @FileParam(
* name="",
* key=null,
* requirements={},
* default=null,
* description="",
* strict=true,
* nullable=false,
* image=false
* )
*/