Les Controller Symfony
Symfony repose sur le modèle MVC et utilise donc des Controllers. Nous en avons vu les bases dans la partie précédente, mais nous allons revenir dessus dans cette partie pour présenter certaines fonctionnalités.
Génération d'URLs et Redirections
Dans la partie précédente, nous avons nommé nos routes. C'est ici que cela va devenir utile. En effet on peut utiliser le nom d'une route pour générer une URL de cette route, en remplissant ses paramètres.
Reprennons cet exemple de route paramètrée :
/**
* @Route("/blog/{id}", name="blog_show", methods = {"GET"})
*/
public function show(int $id) { ... }
On peut donc générer une URL qui correspond à cette route comme ceci :
$url = $this->generateUrl('blog_show', ['id' => 10]);
On peut également faire des redirections vers des routes :
return $this->redirectToRoute('blog_show', ['id' => 10]);
Ou vers des URLs :
return $this->redirect('http://symfony.com/doc');
Session
On peut également, via un Controller Symfony, accèder à la session et y lire/écrire des données. Pour cela, il suffit de prendre en paramètre de la méthode endpoint un paramètre de type SessionInterface
qui sera fourni par le framework.
/**
* @Route("/auth/login", name="login", methods = {"POST"})
*/
public function login(SessionInterface $session) { ... }
Il s'agit d'un tableau associatif avec le lequel vous pouvez interagir via les méthodes set
et get
:
/**
* @Route("/auth/login", name="login", methods = {"POST"})
*/
public function login(SessionInterface $session) {
$session->set('key', 'value');
$value = $session->get('key');
}
L'objet Request
L'objet Request qui peut être fourni en paramètre d'une méthode endpoint par le framework, permet d'accèder aux données de la requête :
public function myEndpoint(Request $request){ ... }
Il permet de récupérer des paramètres du Body de la requête (équivalent $_POST) :
$request->request->get('myParam');
Ou des paramètres GET (équivalent $_GET) :
$request->query->get('myUrlParam');
Vous pouvez aussi récupérer un fichier dans le Body de la requête (équivalent $_FILES) :
$request->files->get('myFile');
Retourner un fichier
Au lieu de retourner un Template rendu, vous pouvez aussi retourner un fichier qui sera téléchargé au client :
return $this->file('/chemin/du/fichier.pdf');
No Comments