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: Perfilador de Symfony

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
 * )
 */


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow