Suche…
Gib eine 404-Antwort zurück
404 Antworten werden zurückgegeben, wenn auf dem Server keine Ressource gefunden wird. In Symfony kann dieser Status durch NotFoundHttpException
einer NotFoundHttpException
Ausnahme erstellt werden. Verwenden createNotFoundException()
die von der Controller
Klasse bereitgestellte createNotFoundException()
Anweisung, um eine Anweisung zur use
in einem Controller zu vermeiden
<?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));
}
}
Mehrere Routen
In Symfony können mehrere Routen für eine Aktion definiert werden. Dies kann sehr hilfreich sein, wenn Sie Funktionen haben, die dasselbe tun, aber unterschiedliche Parameter haben.
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));
}
}
POST-Anforderungsumleitung
Wenn Sie sich in einer ControllerAction befinden und eine POST-Anforderung eingehen , diese jedoch auf eine andere Route umleiten möchten, während die POST-Methode und das Anforderungsobjekt erhalten bleiben , können Sie Folgendes verwenden:
return $this->redirectToRoute('route', array(
'request' => $request,
), 307);
Code 307 behält hier die Anforderungsmethode bei.
Subdomain-basiertes Routing
Das subdomänenbasierte Routing kann in Symfony mithilfe von host
werden. Beispielsweise kann der _locale
-Parameter als Subdomain-Wert verwendet werden.
Angenommen,
locale: en
domain: somedomain.com
Parameter werden in definierten parameters.yml
Konfigurationsdatei, route wäre:
/**
* @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%"}
* )
*/
Ab diesem Punkt kann der Router mit URIs wie http://de.somedomain.com
umgehen. Die zweite @Route
Annotation kann als Fallback für die Standard-Ländereinstellung und void-Unterdomäne http://somedomain.com
.
Symfony-Routen mit Routing.yml
profile_user_profile:
path: /profile/{id}
defaults: { _controller: ProfileBundle:Profile:profile }
requirements:
id: \d+
methods: [get, delete]
Wenn Sie sich entscheiden, Routing.yml anstelle von Anmerkungen zu verwenden, können Sie alle Routen besser anzeigen und einfacher suchen und finden.
Sie können zwischen Routing.yml und Annotations wählen . Sie können beides für verschiedene Routen verwenden, dies ist jedoch nicht die beste Lösung.
Annotation @Route()
entspricht:
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));
}
}