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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow