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));
}
}