8 changed files with 287 additions and 0 deletions
@ -0,0 +1,94 @@ |
|||
<?php |
|||
|
|||
namespace App\Controller; |
|||
|
|||
use App\Entity\Pokemon; |
|||
use App\Form\PokemonType; |
|||
use App\Repository\PokemonRepository; |
|||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; |
|||
use Symfony\Component\HttpFoundation\Request; |
|||
use Symfony\Component\HttpFoundation\Response; |
|||
use Symfony\Component\Routing\Annotation\Route; |
|||
|
|||
/** |
|||
* @Route("/pokemon") |
|||
*/ |
|||
class PokemonController extends AbstractController |
|||
{ |
|||
/** |
|||
* @Route("/", name="pokemon_index", methods={"GET"}) |
|||
*/ |
|||
public function index(PokemonRepository $pokemonRepository): Response |
|||
{ |
|||
return $this->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'); |
|||
} |
|||
} |
@ -0,0 +1,51 @@ |
|||
<?php |
|||
|
|||
namespace App\Form; |
|||
|
|||
|
|||
use App\Entity\GenerationPoke; |
|||
use App\Entity\Pokemon; |
|||
use App\Entity\TypePoke; |
|||
use Symfony\Bridge\Doctrine\Form\Type\EntityType; |
|||
use Symfony\Component\Form\AbstractType; |
|||
use Symfony\Component\Form\FormBuilderInterface; |
|||
use Symfony\Component\OptionsResolver\OptionsResolver; |
|||
|
|||
class PokemonType extends AbstractType |
|||
{ |
|||
public function buildForm(FormBuilderInterface $builder, array $options) |
|||
{ |
|||
$builder |
|||
->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, |
|||
]); |
|||
} |
|||
} |
@ -0,0 +1,4 @@ |
|||
<form method="post" action="{{ path('pokemon_delete', {'id': pokemon.id}) }}" onsubmit="return confirm('Are you sure you want to delete this item?');"> |
|||
<input type="hidden" name="_token" value="{{ csrf_token('delete' ~ pokemon.id) }}"> |
|||
<button class="btn">Delete</button> |
|||
</form> |
@ -0,0 +1,4 @@ |
|||
{{ form_start(form) }} |
|||
{{ form_widget(form) }} |
|||
<button class="btn">{{ button_label|default('Save') }}</button> |
|||
{{ form_end(form) }} |
@ -0,0 +1,13 @@ |
|||
{% extends 'base.html.twig' %} |
|||
|
|||
{% block title %}Edit Pokemon{% endblock %} |
|||
|
|||
{% block body %} |
|||
<h1>Edit Pokemon</h1> |
|||
|
|||
{{ include('pokemon/_form.html.twig', {'button_label': 'Update'}) }} |
|||
|
|||
<a href="{{ path('pokemon_index') }}">back to list</a> |
|||
|
|||
{{ include('pokemon/_delete_form.html.twig') }} |
|||
{% endblock %} |
@ -0,0 +1,49 @@ |
|||
{% extends 'base.html.twig' %} |
|||
|
|||
{% block title %}Pokemon index{% endblock %} |
|||
|
|||
{% block body %} |
|||
<h1>Pokemon index</h1> |
|||
|
|||
<table class="table"> |
|||
<thead> |
|||
<tr> |
|||
<th>Numero</th> |
|||
<th>Nom</th> |
|||
<th>Type 1</th> |
|||
<th>Type 2</th> |
|||
<th>Generation</th> |
|||
<th>Vie</th> |
|||
<th>Attaque</th> |
|||
<th>Defense</th> |
|||
<th>Legendaire</th> |
|||
<th>actions</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
{% for pokemon in pokemon %} |
|||
<tr> |
|||
<td>{{ pokemon.numero }}</td> |
|||
<td>{{ pokemon.nom }}</td> |
|||
<td>{{ pokemon.type1.name }}</td> |
|||
<td>{% if pokemon.type2 %} {{ pokemon.type2.name }} {% endif %}</td> |
|||
<td>{{ pokemon.generation.name }}</td> |
|||
<td>{{ pokemon.vie }}</td> |
|||
<td>{{ pokemon.attaque }}</td> |
|||
<td>{{ pokemon.defense }}</td> |
|||
<td>{{ pokemon.legendaire ? 'Yes' : 'No' }}</td> |
|||
<td> |
|||
<a href="{{ path('pokemon_show', {'id': pokemon.id}) }}">show</a> |
|||
<a href="{{ path('pokemon_edit', {'id': pokemon.id}) }}">edit</a> |
|||
</td> |
|||
</tr> |
|||
{% else %} |
|||
<tr> |
|||
<td colspan="8">no records found</td> |
|||
</tr> |
|||
{% endfor %} |
|||
</tbody> |
|||
</table> |
|||
|
|||
<a href="{{ path('pokemon_new') }}">Create new</a> |
|||
{% endblock %} |
@ -0,0 +1,11 @@ |
|||
{% extends 'base.html.twig' %} |
|||
|
|||
{% block title %}New Pokemon{% endblock %} |
|||
|
|||
{% block body %} |
|||
<h1>Create new Pokemon</h1> |
|||
|
|||
{{ include('pokemon/_form.html.twig') }} |
|||
|
|||
<a href="{{ path('pokemon_index') }}">back to list</a> |
|||
{% endblock %} |
@ -0,0 +1,61 @@ |
|||
{% extends 'base.html.twig' %} |
|||
|
|||
{% block title %}Pokemon{% endblock %} |
|||
|
|||
{% block body %} |
|||
<h1>Pokemon</h1> |
|||
|
|||
<table class="table"> |
|||
<tbody> |
|||
|
|||
<tr> |
|||
<th>Numero</th> |
|||
<td>{{ pokemon.numero }}</td> |
|||
</tr> |
|||
<tr> |
|||
<th>Nom</th> |
|||
<td>{{ pokemon.nom }}</td> |
|||
</tr> |
|||
<tr> |
|||
<th>Vie</th> |
|||
<td>{{ pokemon.vie }}</td> |
|||
</tr> |
|||
<tr> |
|||
<th>Attaque</th> |
|||
<td>{{ pokemon.attaque }}</td> |
|||
</tr> |
|||
<tr> |
|||
<th>Defense</th> |
|||
<td>{{ pokemon.defense }}</td> |
|||
</tr> |
|||
<tr> |
|||
<th>Legendaire</th> |
|||
<td>{{ pokemon.legendaire ? 'Yes' : 'No' }}</td> |
|||
</tr> |
|||
<tr> |
|||
<th>Type 1</th> |
|||
<td>{{ pokemon.type1.name }}</td> |
|||
</tr> |
|||
|
|||
{% if pokemon.type2 %} |
|||
<tr> |
|||
<th>Type 2</th> |
|||
<td>{{ pokemon.type2.name }}</td> |
|||
</tr> |
|||
{% endif %} |
|||
|
|||
<tr> |
|||
<th>Generation</th> |
|||
<td>{{ pokemon.generation.name }}</td> |
|||
</tr> |
|||
|
|||
|
|||
</tbody> |
|||
</table> |
|||
|
|||
<a href="{{ path('pokemon_index') }}">back to list</a> |
|||
|
|||
<a href="{{ path('pokemon_edit', {'id': pokemon.id}) }}">edit</a> |
|||
|
|||
{{ include('pokemon/_delete_form.html.twig') }} |
|||
{% endblock %} |
Loading…
Reference in new issue