From e174cb301b8b3188a614834b083276d6ee9f53e0 Mon Sep 17 00:00:00 2001 From: "art.dambrine" Date: Mon, 29 Mar 2021 15:59:32 +0200 Subject: [PATCH] pokemon crud --- src/Controller/PokemonController.php | 94 ++++++++++++++++++++++++ src/Form/PokemonType.php | 51 +++++++++++++ templates/pokemon/_delete_form.html.twig | 4 + templates/pokemon/_form.html.twig | 4 + templates/pokemon/edit.html.twig | 13 ++++ templates/pokemon/index.html.twig | 49 ++++++++++++ templates/pokemon/new.html.twig | 11 +++ templates/pokemon/show.html.twig | 61 +++++++++++++++ 8 files changed, 287 insertions(+) create mode 100644 src/Controller/PokemonController.php create mode 100644 src/Form/PokemonType.php create mode 100644 templates/pokemon/_delete_form.html.twig create mode 100644 templates/pokemon/_form.html.twig create mode 100644 templates/pokemon/edit.html.twig create mode 100644 templates/pokemon/index.html.twig create mode 100644 templates/pokemon/new.html.twig create mode 100644 templates/pokemon/show.html.twig diff --git a/src/Controller/PokemonController.php b/src/Controller/PokemonController.php new file mode 100644 index 0000000..51364a3 --- /dev/null +++ b/src/Controller/PokemonController.php @@ -0,0 +1,94 @@ +render('pokemon/index.html.twig', [ + 'pokemon' => $pokemonRepository->findAll(), + ]); + } + + /** + * @Route("/new", name="pokemon_new", methods={"GET","POST"}) + */ + public function new(Request $request): Response + { + $pokemon = new Pokemon(); + $form = $this->createForm(PokemonType::class, $pokemon); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $entityManager = $this->getDoctrine()->getManager(); + $entityManager->persist($pokemon); + $entityManager->flush(); + + return $this->redirectToRoute('pokemon_index'); + } + + return $this->render('pokemon/new.html.twig', [ + 'pokemon' => $pokemon, + 'form' => $form->createView(), + ]); + } + + /** + * @Route("/{id}", name="pokemon_show", methods={"GET"}) + */ + public function show(Pokemon $pokemon): Response + { + return $this->render('pokemon/show.html.twig', [ + 'pokemon' => $pokemon, + ]); + } + + /** + * @Route("/{id}/edit", name="pokemon_edit", methods={"GET","POST"}) + */ + public function edit(Request $request, Pokemon $pokemon): Response + { + $form = $this->createForm(PokemonType::class, $pokemon); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $this->getDoctrine()->getManager()->flush(); + + return $this->redirectToRoute('pokemon_index'); + } + + return $this->render('pokemon/edit.html.twig', [ + 'pokemon' => $pokemon, + 'form' => $form->createView(), + ]); + } + + /** + * @Route("/{id}", name="pokemon_delete", methods={"POST"}) + */ + public function delete(Request $request, Pokemon $pokemon): Response + { + if ($this->isCsrfTokenValid('delete'.$pokemon->getId(), $request->request->get('_token'))) { + $entityManager = $this->getDoctrine()->getManager(); + $entityManager->remove($pokemon); + $entityManager->flush(); + } + + return $this->redirectToRoute('pokemon_index'); + } +} diff --git a/src/Form/PokemonType.php b/src/Form/PokemonType.php new file mode 100644 index 0000000..6bf1b12 --- /dev/null +++ b/src/Form/PokemonType.php @@ -0,0 +1,51 @@ +add('numero') + ->add('nom') + ->add('vie') + ->add('attaque') + ->add('defense') + ->add('legendaire') + ->add('type1',EntityType::class, array( + 'class' => TypePoke::class, + 'choice_label' => 'name', + 'label' => 'Type 1' + )) + ->add('type2',EntityType::class, array( + 'class' => TypePoke::class, + 'required' => false, + 'empty_data' => null, + 'choice_label' => 'name', + 'label' => 'Type 2', + )) + ->add('generation',EntityType::class, array( + 'class' => GenerationPoke::class, + 'choice_label' => 'name', + 'label' => 'Generation' + )) + ; + } + + public function configureOptions(OptionsResolver $resolver) + { + $resolver->setDefaults([ + 'data_class' => Pokemon::class, + ]); + } +} diff --git a/templates/pokemon/_delete_form.html.twig b/templates/pokemon/_delete_form.html.twig new file mode 100644 index 0000000..45d1698 --- /dev/null +++ b/templates/pokemon/_delete_form.html.twig @@ -0,0 +1,4 @@ +
+ + +
diff --git a/templates/pokemon/_form.html.twig b/templates/pokemon/_form.html.twig new file mode 100644 index 0000000..bf20b98 --- /dev/null +++ b/templates/pokemon/_form.html.twig @@ -0,0 +1,4 @@ +{{ form_start(form) }} + {{ form_widget(form) }} + +{{ form_end(form) }} diff --git a/templates/pokemon/edit.html.twig b/templates/pokemon/edit.html.twig new file mode 100644 index 0000000..8a41360 --- /dev/null +++ b/templates/pokemon/edit.html.twig @@ -0,0 +1,13 @@ +{% extends 'base.html.twig' %} + +{% block title %}Edit Pokemon{% endblock %} + +{% block body %} +

Edit Pokemon

+ + {{ include('pokemon/_form.html.twig', {'button_label': 'Update'}) }} + + back to list + + {{ include('pokemon/_delete_form.html.twig') }} +{% endblock %} diff --git a/templates/pokemon/index.html.twig b/templates/pokemon/index.html.twig new file mode 100644 index 0000000..9ff1ac0 --- /dev/null +++ b/templates/pokemon/index.html.twig @@ -0,0 +1,49 @@ +{% extends 'base.html.twig' %} + +{% block title %}Pokemon index{% endblock %} + +{% block body %} +

Pokemon index

+ + + + + + + + + + + + + + + + + + {% for pokemon in pokemon %} + + + + + + + + + + + + + {% else %} + + + + {% endfor %} + +
NumeroNomType 1Type 2GenerationVieAttaqueDefenseLegendaireactions
{{ pokemon.numero }}{{ pokemon.nom }}{{ pokemon.type1.name }}{% if pokemon.type2 %} {{ pokemon.type2.name }} {% endif %}{{ pokemon.generation.name }}{{ pokemon.vie }}{{ pokemon.attaque }}{{ pokemon.defense }}{{ pokemon.legendaire ? 'Yes' : 'No' }} + show + edit +
no records found
+ + Create new +{% endblock %} diff --git a/templates/pokemon/new.html.twig b/templates/pokemon/new.html.twig new file mode 100644 index 0000000..87e5962 --- /dev/null +++ b/templates/pokemon/new.html.twig @@ -0,0 +1,11 @@ +{% extends 'base.html.twig' %} + +{% block title %}New Pokemon{% endblock %} + +{% block body %} +

Create new Pokemon

+ + {{ include('pokemon/_form.html.twig') }} + + back to list +{% endblock %} diff --git a/templates/pokemon/show.html.twig b/templates/pokemon/show.html.twig new file mode 100644 index 0000000..5100705 --- /dev/null +++ b/templates/pokemon/show.html.twig @@ -0,0 +1,61 @@ +{% extends 'base.html.twig' %} + +{% block title %}Pokemon{% endblock %} + +{% block body %} +

Pokemon

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {% if pokemon.type2 %} + + + + + {% endif %} + + + + + + + + +
Numero{{ pokemon.numero }}
Nom{{ pokemon.nom }}
Vie{{ pokemon.vie }}
Attaque{{ pokemon.attaque }}
Defense{{ pokemon.defense }}
Legendaire{{ pokemon.legendaire ? 'Yes' : 'No' }}
Type 1{{ pokemon.type1.name }}
Type 2{{ pokemon.type2.name }}
Generation{{ pokemon.generation.name }}
+ + back to list + + edit + + {{ include('pokemon/_delete_form.html.twig') }} +{% endblock %}