Buscar..


Devuelve una respuesta 404

Se devuelven 404 respuestas cuando no se encuentra un recurso en el servidor, en Symfony este estado se puede crear lanzando una excepción NotFoundHttpException . Para evitar una declaración de use adicional dentro de un controlador, use createNotFoundException() provista por la clase Controller

<?php

namespace Bundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

class TestController extends Controller
{
    /**
     * @Route("/{id}", name="test")
     * Recommended to avoid template() as it has a lot of background processing.
     * Query database for 'test' record with 'id' using param converters.
     */
    public function testAction(Test $test)
    {
        if (!$test) {
            throw $this->createNotFoundException('Test record not found.');
        }
        return $this->render('::Test/test.html.twig', array('test' => $test));
    }

}

Múltiples rutas

En Symfony es posible definir múltiples rutas para una acción. Esto puede ser muy útil si tiene funciones que hacen lo mismo pero tienen diferentes parámetros.

class TestController extends Controller
{
    /**
     * @Route("/test1/{id}", name="test")
     * @Route("/test2/{id}", name="test2")
     * Here you can define multiple routes with multiple names
     */
    public function testAction(Test $test)
    {
        if (!$test) {
            throw $this->createNotFoundException('Test record not found.');
        }

        return $this->render('::Test/test.html.twig', array('test' => $test));
    }
}

Solicitud de POST redireccionamiento

Cuando se encuentra en una instancia de controllerAction Y recibe una solicitud POST , pero desea redirigirla a una ruta diferente , mientras mantiene el método POST y el objeto de solicitud , puede usar lo siguiente:

return $this->redirectToRoute('route', array(
    'request' => $request,
), 307);

El código 307 aquí conserva el método de solicitud.

Enrutamiento basado en subdominio

El enrutamiento basado en subdominios se puede manejar en Symfony usando el parámetro de host . Por ejemplo, el parámetro _locale se puede utilizar como valor de subdominio.

Asumiendo

locale: en
domain: somedomain.com

los parámetros se definen en el archivo de configuración parameters.yml , la ruta sería:

/**
 * @Route(
 *      "/",
 *      name="homepage",
 *      host="{_locale}.{domain}",
 *      defaults={"_locale" = "%locale%", "domain" = "%domain%"},
 *      requirements={"_locale" = "%locale%|de|fr", "domain" = "%domain%"}
 * )
 * @Route(
 *      "/",
 *      name="homepage_default",
 *      defaults={"_locale" = "%locale%"}
 * )
 */

Desde este punto, el enrutador puede manejar URI como http://de.somedomain.com . La segunda anotación de @Route se puede usar como una alternativa para la configuración regional predeterminada y el subdominio nulo, http://somedomain.com .

Rutas de Symfony usando Routing.yml

    profile_user_profile:
        path:    /profile/{id}
        defaults: { _controller: ProfileBundle:Profile:profile }
        requirements:
            id: \d+
        methods: [get, delete]

Si decide utilizar Routing.yml en lugar de Anotaciones, puede obtener una mejor vista de todas las rutas y es más fácil buscar y encontrar una.

Depende de usted elegir entre Routing.yml y Annotations . Puedes usar ambos para diferentes rutas, pero esta no es la mejor solución.

Anotación @Route() equivalente es:

class ProfileController extends Controller
{
    /**
     * @Route("/profile/{id}", name="profile_user_profile", requirements={"id": "\d+"})
     * @Method("GET", "DELETE")
     */
    public function profileAction($id)
    {
        if (!$id) {
            throw $this->createNotFoundException('User not found.');
        }

        return $this->render('::Profile/profile.html.twig', array('id' => $id));
    }
}


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