Event CRUD generated

This commit is contained in:
Marc Ducobu 2016-03-22 17:16:19 +01:00
parent acd25fc57b
commit 4d02314770
9 changed files with 466 additions and 0 deletions

View File

@ -0,0 +1,224 @@
<?php
namespace Chill\EventBundle\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Chill\EventBundle\Entity\Event;
use Chill\EventBundle\Form\EventType;
/**
* Event controller.
*
*/
class EventController extends Controller
{
/**
* Lists all Event entities.
*
*/
public function indexAction()
{
$em = $this->getDoctrine()->getManager();
$entities = $em->getRepository('ChillEventBundle:Event')->findAll();
return $this->render('ChillEventBundle:Event:index.html.twig', array(
'entities' => $entities,
));
}
/**
* Creates a new Event entity.
*
*/
public function createAction(Request $request)
{
$entity = new Event();
$form = $this->createCreateForm($entity);
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('event_show', array('id' => $entity->getId())));
}
return $this->render('ChillEventBundle:Event:new.html.twig', array(
'entity' => $entity,
'form' => $form->createView(),
));
}
/**
* Creates a form to create a Event entity.
*
* @param Event $entity The entity
*
* @return \Symfony\Component\Form\Form The form
*/
private function createCreateForm(Event $entity)
{
$form = $this->createForm(new EventType(), $entity, array(
'action' => $this->generateUrl('event_create'),
'method' => 'POST',
));
$form->add('submit', 'submit', array('label' => 'Create'));
return $form;
}
/**
* Displays a form to create a new Event entity.
*
*/
public function newAction()
{
$entity = new Event();
$form = $this->createCreateForm($entity);
return $this->render('ChillEventBundle:Event:new.html.twig', array(
'entity' => $entity,
'form' => $form->createView(),
));
}
/**
* Finds and displays a Event entity.
*
*/
public function showAction($id)
{
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('ChillEventBundle:Event')->find($id);
if (!$entity) {
throw $this->createNotFoundException('Unable to find Event entity.');
}
$deleteForm = $this->createDeleteForm($id);
return $this->render('ChillEventBundle:Event:show.html.twig', array(
'entity' => $entity,
'delete_form' => $deleteForm->createView(),
));
}
/**
* Displays a form to edit an existing Event entity.
*
*/
public function editAction($id)
{
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('ChillEventBundle:Event')->find($id);
if (!$entity) {
throw $this->createNotFoundException('Unable to find Event entity.');
}
$editForm = $this->createEditForm($entity);
$deleteForm = $this->createDeleteForm($id);
return $this->render('ChillEventBundle:Event:edit.html.twig', array(
'entity' => $entity,
'edit_form' => $editForm->createView(),
'delete_form' => $deleteForm->createView(),
));
}
/**
* Creates a form to edit a Event entity.
*
* @param Event $entity The entity
*
* @return \Symfony\Component\Form\Form The form
*/
private function createEditForm(Event $entity)
{
$form = $this->createForm(new EventType(), $entity, array(
'action' => $this->generateUrl('event_update', array('id' => $entity->getId())),
'method' => 'PUT',
));
$form->add('submit', 'submit', array('label' => 'Update'));
return $form;
}
/**
* Edits an existing Event entity.
*
*/
public function updateAction(Request $request, $id)
{
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('ChillEventBundle:Event')->find($id);
if (!$entity) {
throw $this->createNotFoundException('Unable to find Event entity.');
}
$deleteForm = $this->createDeleteForm($id);
$editForm = $this->createEditForm($entity);
$editForm->handleRequest($request);
if ($editForm->isValid()) {
$em->flush();
return $this->redirect($this->generateUrl('event_edit', array('id' => $id)));
}
return $this->render('ChillEventBundle:Event:edit.html.twig', array(
'entity' => $entity,
'edit_form' => $editForm->createView(),
'delete_form' => $deleteForm->createView(),
));
}
/**
* Deletes a Event entity.
*
*/
public function deleteAction(Request $request, $id)
{
$form = $this->createDeleteForm($id);
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('ChillEventBundle:Event')->find($id);
if (!$entity) {
throw $this->createNotFoundException('Unable to find Event entity.');
}
$em->remove($entity);
$em->flush();
}
return $this->redirect($this->generateUrl('event'));
}
/**
* Creates a form to delete a Event entity by id.
*
* @param mixed $id The entity id
*
* @return \Symfony\Component\Form\Form The form
*/
private function createDeleteForm($id)
{
return $this->createFormBuilder()
->setAction($this->generateUrl('event_delete', array('id' => $id)))
->setMethod('DELETE')
->add('submit', 'submit', array('label' => 'Delete'))
->getForm()
;
}
}

43
Form/EventType.php Normal file
View File

@ -0,0 +1,43 @@
<?php
namespace Chill\EventBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class EventType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('label')
->add('date')
->add('center')
->add('type')
->add('circle')
;
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Chill\EventBundle\Entity\Event'
));
}
/**
* @return string
*/
public function getName()
{
return 'chill_eventbundle_event';
}
}

View File

@ -1,3 +1,7 @@
chill_event_event:
resource: "@ChillEventBundle/Resources/config/routing/event.yml"
prefix: /event
chill_event_fr_admin_event_status: chill_event_fr_admin_event_status:
resource: "@ChillEventBundle/Resources/config/routing/status.yml" resource: "@ChillEventBundle/Resources/config/routing/status.yml"
prefix: /{_locale}/admin/event/status prefix: /{_locale}/admin/event/status

View File

@ -0,0 +1,30 @@
event:
path: /
defaults: { _controller: "ChillEventBundle:Event:index" }
event_show:
path: /{id}/show
defaults: { _controller: "ChillEventBundle:Event:show" }
event_new:
path: /new
defaults: { _controller: "ChillEventBundle:Event:new" }
event_create:
path: /create
defaults: { _controller: "ChillEventBundle:Event:create" }
methods: POST
event_edit:
path: /{id}/edit
defaults: { _controller: "ChillEventBundle:Event:edit" }
event_update:
path: /{id}/update
defaults: { _controller: "ChillEventBundle:Event:update" }
methods: [POST, PUT]
event_delete:
path: /{id}/delete
defaults: { _controller: "ChillEventBundle:Event:delete" }
methods: [POST, DELETE]

View File

@ -0,0 +1,16 @@
{% extends '::base.html.twig' %}
{% block body -%}
<h1>Event edit</h1>
{{ form(edit_form) }}
<ul class="record_actions">
<li>
<a href="{{ path('event') }}">
Back to the list
</a>
</li>
<li>{{ form(delete_form) }}</li>
</ul>
{% endblock %}

View File

@ -0,0 +1,43 @@
{% extends '::base.html.twig' %}
{% block body -%}
<h1>Event list</h1>
<table class="records_list">
<thead>
<tr>
<th>Id</th>
<th>Label</th>
<th>Date</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
{% for entity in entities %}
<tr>
<td><a href="{{ path('event_show', { 'id': entity.id }) }}">{{ entity.id }}</a></td>
<td>{{ entity.label }}</td>
<td>{% if entity.date %}{{ entity.date|date('Y-m-d H:i:s') }}{% endif %}</td>
<td>
<ul>
<li>
<a href="{{ path('event_show', { 'id': entity.id }) }}">show</a>
</li>
<li>
<a href="{{ path('event_edit', { 'id': entity.id }) }}">edit</a>
</li>
</ul>
</td>
</tr>
{% endfor %}
</tbody>
</table>
<ul>
<li>
<a href="{{ path('event_new') }}">
Create a new entry
</a>
</li>
</ul>
{% endblock %}

View File

@ -0,0 +1,15 @@
{% extends '::base.html.twig' %}
{% block body -%}
<h1>Event creation</h1>
{{ form(form) }}
<ul class="record_actions">
<li>
<a href="{{ path('event') }}">
Back to the list
</a>
</li>
</ul>
{% endblock %}

View File

@ -0,0 +1,36 @@
{% extends '::base.html.twig' %}
{% block body -%}
<h1>Event</h1>
<table class="record_properties">
<tbody>
<tr>
<th>Id</th>
<td>{{ entity.id }}</td>
</tr>
<tr>
<th>Label</th>
<td>{{ entity.label }}</td>
</tr>
<tr>
<th>Date</th>
<td>{{ entity.date|date('Y-m-d H:i:s') }}</td>
</tr>
</tbody>
</table>
<ul class="record_actions">
<li>
<a href="{{ path('event') }}">
Back to the list
</a>
</li>
<li>
<a href="{{ path('event_edit', { 'id': entity.id }) }}">
Edit
</a>
</li>
<li>{{ form(delete_form) }}</li>
</ul>
{% endblock %}

View File

@ -0,0 +1,55 @@
<?php
namespace Chill\EventBundle\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class EventControllerTest extends WebTestCase
{
/*
public function testCompleteScenario()
{
// Create a new client to browse the application
$client = static::createClient();
// Create a new entry in the database
$crawler = $client->request('GET', '/event/');
$this->assertEquals(200, $client->getResponse()->getStatusCode(), "Unexpected HTTP status code for GET /event/");
$crawler = $client->click($crawler->selectLink('Create a new entry')->link());
// Fill in the form and submit it
$form = $crawler->selectButton('Create')->form(array(
'chill_eventbundle_event[field_name]' => 'Test',
// ... other fields to fill
));
$client->submit($form);
$crawler = $client->followRedirect();
// Check data in the show view
$this->assertGreaterThan(0, $crawler->filter('td:contains("Test")')->count(), 'Missing element td:contains("Test")');
// Edit the entity
$crawler = $client->click($crawler->selectLink('Edit')->link());
$form = $crawler->selectButton('Update')->form(array(
'chill_eventbundle_event[field_name]' => 'Foo',
// ... other fields to fill
));
$client->submit($form);
$crawler = $client->followRedirect();
// Check the element contains an attribute with value equals "Foo"
$this->assertGreaterThan(0, $crawler->filter('[value="Foo"]')->count(), 'Missing element [value="Foo"]');
// Delete the entity
$client->submit($crawler->selectButton('Delete')->form());
$crawler = $client->followRedirect();
// Check the entity has been delete on the list
$this->assertNotRegExp('/Foo/', $client->getResponse()->getContent());
}
*/
}