Ich arbeite an einem Login & Registrierungsformular wo auf der Homepage muss ich dem Benutzer zwei Optionsfeldoptionen für die Auswahl von zwei Ereignissen (in den Variablen eT1 und eT2 gespeichert) zur Verfügung stellen. Allerdings muss ich sicherstellen, dass das Maxlimit eines bestimmten Ereignisses nicht voll ist, dh. Wenn der Benutzer ein Ereignis auswählt, dessen Maxlimit voll ist, muss eine Fehlermeldung angezeigt werden. * Ich brauche diese Validierungslogik im Controller. * Für die Anmeldung und Registrierung Ich bin mit FOSUserBundleSymfony2 Validierungseinschränkungen
Hier ist der 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(),
));
}
}
unterhalb der Benutzer Entität
<?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;
}
}
unterhalb der Ereignisse Einheit wird
<?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;
}
}
Unten ist die Ereignistyp-Entität
<?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;
}
}
Die Ereignistabelle ist bereits mit nur fünf Zeilen gefüllt, die 5 Ereignistypen darstellen. Maxlimit für Poker (id = 1) ist 12, für Schach (id = 2) ist es 4 und für den Rest drei, dh. Cricket (id = 3), Marmor (id = 4) & Fußball (id = 5) ist er 10.
Sie für den Vorschlag danken :) Aber ich brauche die Validierungslogik in der Steuerung, da es meine Anforderung ist – utkarsh2k2