I am working on a Login & Registration form where in on the homepage i need to provide the user two radio button options for choosing two events (stored in variables eT1 and eT2). However i need to make sure that the maxlimit of any particular event is not full ie. if the user chooses an event whose maxlimit is full an error message need to be displayed. * I need this validation logic inside the controller. * For login and registration i am using FOSUserBundle
Here is the controller code
<?php
namespace AppBundle\Controller;
use AppBundle\Entity\events;
//use AppBundle\Entity\eventtype;
use AppBundle\Entity\users;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
class DefaultController extends Controller {
/**
* @Route("/home", name="homepage")
*/
public function indexAction(Request $request) {
$events = new events();
$form = $this->createFormBuilder($events)
->add('eT1', ChoiceType::class, array(
'choices' => array(
'Poker' => 1,
'Chess' => 2,
'Cricket' => 3,
'Marbles' => 4,
'Football' => 5,
),
'choices_as_values' => true,
'expanded' => true,
'multiple' => false,
'label' => 'Choose After Breakfast Event',
))
->add('eT2', ChoiceType::class, array(
'choices' => array(
'Poker' => 1,
'Chess' => 2,
'Cricket' => 3,
'Marbles' => 4,
'Football' => 5,
),
'choices_as_values' => true,
'expanded' => true,
'multiple' => false,
'label' => 'Choose After Snacks Event',
))
->add('save', SubmitType::class, array('label' => 'Submit'))
->getForm();
if ($request->isMethod('POST')) {
$form->submit($request);
if ($form->isValid()) {
// perform some action, eg. persisting the data to database...
$user = $this->container->get('security.context')->getToken()->getUser();
$events->setuser($user);
// var_dump($id);
// exit;
//$events->setuserID($id);
$em = $this->getDoctrine()->getManager();
// tells Doctrine you want to (eventually) save the Product (no queries yet)
$em->persist($events);
// actually executes the queries (i.e. the INSERT query)
$em->flush();
return $this->redirectToRoute('homepage');
}
}
return $this->render('default/index.html.twig', array(
'form' => $form->createView(),
));
}
}
Below is the users entity
<?php
namespace AppBundle\Entity;
use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\Common\Collections\ArrayCollection;
/**
* users
*
* @ORM\Table(name="users")
* @ORM\Entity(repositoryClass="AppBundle\Repository\usersRepository")
*/
class users extends BaseUser
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* Get id
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* @ORM\OneToMany(targetEntity="events", mappedBy="users")
*/
protected $multiEvents;
public function __construct()
{
parent::__construct();
// your own logic
$this->multiEvents = new ArrayCollection();
//$this->id = $id;
//$this->name = $name;
}
}
Below is the events entity
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* events
*
* @ORM\Table(name="events")
* @ORM\Entity(repositoryClass="AppBundle\Repository\eventsRepository")
*/
class events {
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var int
*
* @ORM\Column(name="user_id", type="integer")
*/
protected $user_id;
/**
* @var int
*
* @ORM\Column(name="ET1", type="integer")
*/
protected $eT1;
/**
* @var int
*
* @ORM\Column(name="ET2", type="integer")
*/
protected $eT2;
/**
* @ORM\ManyToOne(targetEntity="users", inversedBy="multievents")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private $singleUser;
/**
* Get id
*
* @return integer
*/
public function getId() {
return $this->id;
}
/**
* Get user_id
*
* @return integer
*/
public function getuser_id() {
return $this->user_id;
}
/**
* Set user
*
* @param integer $user
* @return events
*/
public function setUser($user) {
$this->singleUser = $user;
}
/**
* Set eT1
*
* @param integer $eT1
* @return events
*/
public function setET1($eT1) {
$this->eT1 = $eT1;
return $this;
}
/**
* Get eT1
*
* @return integer
*/
public function getET1() {
return $this->eT1;
}
/**
* Set eT2
*
* @param integer $eT2
* @return events
*/
public function setET2($eT2) {
$this->eT2 = $eT2;
return $this;
}
/**
* Get eT2
*
* @return integer
*/
public function getET2() {
return $this->eT2;
}
}
Below is the eventtype entity
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* eventtype
*
* @ORM\Table(name="eventtype")
* @ORM\Entity(repositoryClass="AppBundle\Repository\eventtypeRepository")
*/
class eventtype
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var string
*
* @ORM\Column(name="EventName", type="string", length=255)
*/
protected $eventName;
/**
* @var int
*
* @ORM\Column(name="MaxLimit", type="integer")
*/
protected $maxLimit;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set eventName
*
* @param string $eventName
* @return eventtype
*/
public function setEventName($eventName)
{
$this->eventName = $eventName;
return $this;
}
/**
* Get eventName
*
* @return string
*/
public function getEventName()
{
return $this->eventName;
}
/**
* Set maxLimit
*
* @param integer $maxLimit
* @return eventtype
*/
public function setMaxLimit($maxLimit)
{
$this->maxLimit = $maxLimit;
return $this;
}
/**
* Get maxLimit
*
* @return integer
*/
public function getMaxLimit()
{
return $this->maxLimit;
}
}
The eventtype table is already populated with just five rows representing 5 types of events. Maxlimit for Poker(id=1) is 12, for Chess(id=2) it is 4 and for the rest three ie. cricket(id=3), marbles(id=4) & football(id=5) it is 10.