0% ont trouvé ce document utile (0 vote)
242 vues7 pages

Examen - Symfony - CII 2 DSEN N

Transféré par

Sarra Mensi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
242 vues7 pages

Examen - Symfony - CII 2 DSEN N

Transféré par

Sarra Mensi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

1

Ecole Supérieure Privée Technologies & Ingénierie


Type d’épreuve : Devoir Examen
Enseignant : Wissem ELJAOUED
Matière : Framework PHP (Symfony)
Année Universitaire : 2023-2024 Semestre :1
Classe : CII-2-DSEN N
Documents : Autorisés Non autorisés
Date : 16/12/2023 Durée : 1h :30
Nombre de pages : 7 pages

Exercice 01 : (10 pts)


A. QCM (7 pts)

1. Sur une entité doctrine, en utilisant les annotations, quelle annotation permet de définir que la
propriété est une clé primaire

a) #[ORM\Primary Key]
b) #[ORM\Id]
c) #[ORM\Column(type= ‘integer’, primary=true)]
d) #[ORM\Column(type= ‘integer’, primaryKey=true)]

2. Quelle est la commande pour créer une entité ?

a) php app/console doctrine:entity:create


b) php app/console doctrine:entity:make
c) php app/console make:entity
d) php app/console create:entity
3. Quelle est la commande pour créer une migration ?

a) php app/console doctrine:migration:create


b) php app/console doctrine:migration:make
c) php app/console make:migration
d) php app/console create:migration
4. La fonction render() permet de ?
a) Retourner un object Request
b) Retourner une page Twig
c) Retourner une page Twig à partir d’une route
d) Aucune de ces réponses n’est vraie.

5. Soit la route suivante :


#[Route(“/Inscription/{code}/{slug}.{format}”, name :”inscription”, requirements : [

“code” => “\d{3}”, “format”=>”xml|html”], defaults :[“format”=>”html”])]


2
Quelle URL sera bien interceptée parmi les URLs suivantes :
a) /Inscription/12/PHP.json
b) /Inscription/1234/PHP.xml
c) /Inscription/120/PHP
d) /Inscription/2/PHP.html

6. Parmi les codes du contrôleur suivant, lequel fait la mise à jour correctement d’une entité ?

a) c)
<?php <?php
$voiture ->setSerie(1234); $voiture ->setSerie(1234);
$entityManager->flush(); $entityManager ->update($voiture);
$entityManager ->flush();
b) d)
<?php <?php
$voiture ->setSerie(1234); $voiture ->setSerie(1234);
$entityManager ->persist($voiture); $entityManager ->persist($voiture);
$entityManager ->flush();

7. Pour afficher les identifiants des objets produit dans une vue Twig. Quelle est la bonne
syntaxe?
a- {% for produits in produit%} {{produit.id}} {% endfor%}
b- {{ for produits in produit}} {%produit.id%} {{ endfor}}
c- {{ for produits in produit}} {{produit.id}} {{ endfor}}
d- {% for produits in produit%} {%produit.id%} {% endfor%}

B. Question/Réponse (3 pts)
1. Convertir le code PHP suivant en Twig.
<?php
if (count($list_personnes) > 0)
{ foreach ($list_ personnes as $personne )
{ echo ‘<li>’. $personne->getCin().’</li>’ ; }
} else { ?>
<li> Pas de personne trouvé </li>
< ?php } ?>
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
3
Problème : (10 pts)
Nous voulons gérer les auteurs et leurs livres dans une bibliothèque. Dans ce cadre, on propose de créer
une application web avec Symfony 6.3.

Soit le diagramme de classes suivant :

A. Configuration des entités :


A.1. Compléter les annotations (et les attributs) manquantes dans les entités suivantes.

<?php <?php
namespace App\Entity; namespace App\Entity;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
………………………………………………………….. ……………………………………………………………
class Auteur class Livre
{ {
#[ORM\GeneratedValue]
#[ORM\GeneratedValue] #[ORM\Id]
#[ORM\Id] #[ORM\.............................................]
#[ORM\.............................................] private $id;

private $id; #[ORM\.............................................]


private $titre;
#[ORM\.............................................]
private $nom; #[ORM\.............................................]
private $genre;
#[ORM\.............................................] ……………………………………………………………………...
private $prenom; ……………………………………………………………………...
……………………………………………………………………...
#[ORM\.............................................] ……………………………………………………………………...
private $pseudonyme; ……………………………………………………………………...
…………………………………………………………………………… ……………………………………………………………………...
…………………………………………………………………………… ……………………………………………………………………...
…………………………………………………………………………… ……………………………………………………………………...
…………………………………………………………………………… ……………………………………………………………………...
…………………………………………………………………………… ……………………………………………………………………...
…………………………………………………………………………… ……………………………………………………………………...
……………………………………………………………………………
//Getters-Setters //Getters-Setters
} }
4

B. Affichage de la liste des livres :

Soit LivreController, le contrôleur responsable des actions de gestion des livres.

Soit LivreRepository, le repository de l’entité livre.

B.1. Terminer l’action listLivreAction() qui permet de retourner la page Twig suivante :
‘listLivre.html.twig’ (se trouve sous : Templates/Livre). Cette page Twig permet de retourner la liste
des livres.

<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class LivreController extends Controller


{
……………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………
public function listLivreAction(…………………………………………………………………………..)
{
//Liste des livres
…………………………………………………………………………………………………………………………………..

return $this->render('…………………………………………………………………………………………………',
array(
…………………………………………………………………………………………………
));
}
}

B.2. Compléter la page Twig suivante : ‘listLivre.html.twig’. Pour l’auteur d’un livre, on veut afficher
son nom.

<h1> Liste des livres </h1>


<table border="1">
<tr>
<td> id </td>
<td> titre </td>
<td> genre </td>
<td> auteur </td>
</tr>
……………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………
5
……………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………
</table>

C. Mise à jour d’un Livre :

Pour mettre à jour un Livre, nous avons besoin de créer un formulaire pour introduire les données d’un
livre. Soit ‘LivreForm’, le formulaire de mise à jour d’un livre.

C.1. Compléter le formulaire ‘LivreForm’ :

<?php
namespace App\Form;

class LivreForm extends AbstractType


{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add(……………….., ………………………………….::class)
…………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………………………………………
)
}
}

C.2. Terminer l’action updateLivreAction() qui permet de:

• Rediriger vers la liste des livres Si la mise à jour d’un livre est effectuée correctement
(sachant que le nom de la route de la liste des mannequins est listeLivreRoute).
• Sinon, Afficher le formulaire ‘LivreForm’ en utilisant la page Twig suivante :
‘updateLivre.html.twig’ (se trouve sous : Templates/Livre).

<?php
namespace App\Controller;
class LivreController extends Controller
{

……………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………
public function updateLivreAction(Request $request , ………, …………………………………….,
……………………………………..)
{
// Récupération du livre à modifier
………………………………………………………………………………………………………………………………………………..

// Création d’un formulaire


6
$form = $this->……………………… (…………………………..::class, ………………………..);
$form->handleRequest(……………………………………….);

if (…………………………………………………………………………………)
{
//Update du livre
…………………………………………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………………………………….
return $this-> ………………………………………………………………………………………………
}

return $this->render('………………………………………………………………………………………………',
array(
……………………………………………………………………………………………………………………….
));
}
}

C.3. Compléter la page Twig suivante : ‘updateLivre.html.twig’.

<h1>Mise à jour d’un livre</h1>

<form action=’’ method=………………..>

………………………………………………………………………………………………….

<input type=……………………./>
</form>

C. Suppression d’un auteur:

Soit AuteurController, le contrôleur responsable des actions de gestion des auteurs.

Soit AuteurRepository, le repository de l’entité auteur.

D.1. Terminer l’action deleteAuteurAction() qui permet de supprimer un auteur et de rediriger vers la
liste des auteurs Si la suppression d’un auteur est effectuée correctement (sachant que la route de la liste
des auteurs est ListeAuteurRoute).

<?php
namespace App\Controller;
class AuteurController extends Controller
{

……………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………
public function deleteAuteurAction(Request $request,………., ………………………………..,
…………………………………………….)
{
7
// Récupération de l’auteur à supprimer
………………………………………………………………………………………………………………………………………………………
//Delete auteur

…………………………………………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………………………………….

return $this->…………………………………………………………………………………………………………………………..
}
}

Annexe :
Pour afficher une liste déroulante de type Entity dans un formulaire, utiliser le code suivant :

EntityType::class, array( 'class' => 'NomBundle\Entity\NomEntity', 'choice_label'=>'NomLabel’,


'expanded'=>false, 'multiple'=>false)

Vous aimerez peut-être aussi