Recherche…


Renvoie une réponse 404

404 réponses sont renvoyées lorsqu'une ressource est introuvable sur le serveur. Dans Symfony, ce statut peut être créé en lançant une exception NotFoundHttpException . Pour éviter une instruction d' use supplémentaire dans un contrôleur, utilisez le createNotFoundException() fourni par la classe 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));
    }

}

Routes multiples

Dans Symfony, il est possible de définir plusieurs routes pour une action. Cela peut être très utile si vous avez des fonctions qui font la même chose mais qui ont des paramètres différents.

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

Redirection de demande POST

Lorsque vous êtes dans un controllerAction Et que vous recevez une requête POST , mais que vous souhaitez la rediriger vers un autre itinéraire , tout en conservant la méthode POST et l'objet de requête , vous pouvez utiliser les éléments suivants:

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

Le code 307 conserve ici la méthode de requête.

Routage basé sur un sous-domaine

Le routage basé sur un sous-domaine peut être géré dans Symfony en utilisant le paramètre host . Par exemple, le paramètre _locale peut être utilisé comme valeur de sous-domaine.

En supposant

locale: en
domain: somedomain.com

les paramètres sont définis dans le fichier de configuration parameters.yml , route serait:

/**
 * @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%"}
 * )
 */

De ce point, le routeur peut gérer les adresses URI telles que http://de.somedomain.com . La deuxième annotation @Route peut être utilisée comme @Route pour les paramètres régionaux par défaut et le sous-domaine void, http://somedomain.com .

Routes Symfony utilisant Routing.yml

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

Si vous décidez d'utiliser Routing.yml au lieu des Annotations, vous pouvez mieux voir toutes les routes et rechercher et en trouver plus facilement.

C'est à vous de choisir entre Routing.yml et Annotations . Vous pouvez utiliser les deux pour différents itinéraires, mais ce n'est pas la meilleure solution.

Annotation @Route() est l'équivalent:

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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow