Signup.php (Entity):
<?php
// src/AppBundle/Entity/Signup.php
namespace AppBundle\Entity;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use EWZ\Bundle\RecaptchaBundle\Validator\Constraints as Recaptcha;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="users")
* @UniqueEntity("username", message = "Gebruikersnaam is al in gebruik.")
* @UniqueEntity("email", message = "Emailadres is al in gebruik.")
*/
class Signup
{
/**
* @ORM\id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var string $username
* @ORM\Column(name="username", type="string", length=100, nullable=false, unique=true)
*/
protected $username;
/**
* @var string $email
* @ORM\Column(name="email", type="string", length=255, nullable=false, unique=true)
*/
protected $email;
/**
* @var string $firstname
* @ORM\Column(name="firstname", type="string", length=255, nullable=false)
*/
protected $firstname;
/**
* @var string $lastname
* @ORM\Column(name="lastname", type="string", length=255, nullable=false)
*/
protected $lastname;
/**
* @var string $gender
* @ORM\Column(name="gender", type="string", length=100, nullable=false)
*/
protected $gender;
/**
* @var date $birthday
* @ORM\Column(name="birthday", type="date", length=100, nullable=false)
*/
protected $birthday;
/**
* @var string $password
* @ORM\Column(name="password", type="string", length=255, nullable=false)
*/
protected $password;
/**
* @var \DateTime $regdate
* @ORM\Column(name="regdate", type="datetime", length=255, nullable=false)
*/
protected $regdate;
/**
* @Recaptcha\IsTrue
*/
public $recaptcha;
public static function loadValidatorMetadata(ClassMetadata $metadata)
{
// Gebruikersnaam
$metadata->addPropertyConstraint('username', new Assert\NotBlank(array(
'message' => 'Gebruikersnaam is verplicht.'
))
);
$metadata->addPropertyConstraint('username', new Assert\Length(array(
'min' => 2,
'max' => 20,
'minMessage' => 'Gebruikersnaam moet minimaal {{ limit }} karakters lang zijn.',
'maxMessage' => 'Gebruikersnaam mag maximaal {{ limit }} karakters lang zijn.'
))
);
$metadata->addPropertyConstraint('username', new Assert\Regex(array(
'pattern' => '/^[a-zA-Z0-9_-|]+$/i',
'message' => '{{ value }} is niet geldig. Toegestane karakters: _ - |'
))
);
$metadata->addPropertyConstraint('email', new Assert\NotBlank(array(
'message' => 'Emailadres is verplicht.'
))
);
$metadata->addPropertyConstraint('email', new Assert\Email(array(
'message' => "{{ value }} is geen geldige emailadres.",
'checkMX' => true
))
);
// Voornaam
$metadata->addPropertyConstraint('firstname', new Assert\NotBlank(array(
'message' => 'Voornaam is verplicht.'
))
);
$metadata->addPropertyConstraint('firstname', new Assert\Length(array(
'min' => 2,
'max' => 25,
'minMessage' => 'Voornaam moet minimaal {{ limit }} karakters lang zijn.',
'maxMessage' => 'Voornaam mag maximaal {{ limit }} karakters lang zijn.'
))
);
$metadata->addPropertyConstraint('firstname', new Assert\Regex(array(
'pattern' => '/^[a-zA-Z0-9_-|]+$/i',
'message' => '{{ value }} is niet geldig. Toegestane karakters: _ - |'
))
);
// Achternaam
$metadata->addPropertyConstraint('lastname', new Assert\NotBlank(array(
'message' => 'Achternaam is verplicht.'
))
);
$metadata->addPropertyConstraint('lastname', new Assert\Length(array(
'min' => 2,
'max' => 25,
'minMessage' => 'Achternaam moet minimaal {{ limit }} karakters lang zijn.',
'maxMessage' => 'Achternaam mag maximaal {{ limit }} karakters lang zijn.'
))
);
$metadata->addPropertyConstraint('lastname', new Assert\Regex(array(
'pattern' => '/^[a-zA-Z0-9_-| ]+$/i',
'message' => '{{ value }} is niet geldig. Toegestane karakters: _ - |'
))
);
// Geslacht
$metadata->addPropertyConstraint('gender', new Assert\Choice(array(
'message' => 'Kies een geldige geslacht.',
'choices' => array('male', 'female')
))
);
// Geboortedatum
$metadata->addPropertyConstraint('birthday', new Assert\Date(array(
'message' => 'Deze geboortedatum is niet geldig'
))
);
// Wachtwoord
$metadata->addPropertyConstraint('password', new Assert\NotBlank(array(
'message' => 'Wachtwoord is verplicht.'
))
);
$metadata->addPropertyConstraint('password', new Assert\Length(array(
'min' => 5,
'max' => 25,
'minMessage' => 'Wachtwoord moet minimaal {{ limit }} karakters lang zijn.',
'maxMessage' => 'Wachtwoord mag maximaal {{ limit }} karakters lang zijn.'
))
);
$metadata->addPropertyConstraint('password', new Assert\Regex(array(
'pattern' => '/^[a-zA-Z0-9_-|]+$/i',
'message' => 'Wachtwoord is niet geldig. Toegestane karakters: _ - |'
))
);
}
public function getId()
{
return $this->id;
}
public function setId($id)
{
$this->id = $id;
}
public function getUsername()
{
return $this->username;
}
public function setUsername($username)
{
$this->username = $username;
}
public function getEmail()
{
return $this->email;
}
public function setEmail($email)
{
$this->email = strtolower($email);
return $this;
}
public function getFirstname()
{
return $this->firstname;
}
public function setFirstname($firstname)
{
$this->firstname = $firstname;
}
public function getLastname()
{
return $this->lastname;
}
public function setLastname($lastname)
{
$this->lastname = $lastname;
}
public function getGender()
{
return $this->gender;
}
public function setGender($gender)
{
$this->gender = $gender;
}
public function getBirthday()
{
return $this->birthday;
}
public function setBirthday(\DateTime $birthday = null)
{
$this->birthday = $birthday;
}
public function getPassword()
{
return $this->password;
}
public function setPassword($password)
{
$this->password = $password;
}
public function getRegdate()
{
return $this->regdate;
}
public function setRegdate(\DateTime $regdate = null)
{
$this->regdate = $regdate;
}
}
?>
SignupController.php (Controller):
<?php
// src/AppBundle/Controller/SignupController.php
namespace AppBundle\Controller;
use AppBundle\Entity\Signup;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\Encoder\MessageDigestPasswordEncoder;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use EWZ\Bundle\RecaptchaBundle\EWZRecaptchaBundle;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
class SignupController extends Controller
{
/**
* @Route("/signup/", name="signup")
*/
public function indexAction(Request $request)
{
$signup = new Signup();
$form = $this->createFormBuilder($signup, array('required' => false))
->add('username', 'text', array('label' => 'Gebruikersnaam'))
->add('email', 'email', array('label' => 'Emailadres'))
->add('firstname', 'text', array('label' => 'Voornaam'))
->add('lastname', 'text', array('label' => 'Achternaam'))
->add('gender', 'choice', array(
'choices' => array(
'male' => 'Man',
'female' => 'Vrouw'
)
)
)
->add('birthday', 'date', array(
'label' => 'Geboortedatum',
'format' => 'dd-MMM-yyyy',
'years' => range(date('Y')-16, 120)
)
)
->add('password', 'repeated', array(
'type' => 'password',
'invalid_message' => 'Wachtwoord komen niet overeen.',
'options' => array('attr' => array('class' => 'password-field')),
'first_options' => array('label' => 'Wachtwoord'),
'second_options' => array('label' => 'Bevestig wachtwoord')))
->add('recaptcha', 'ewz_recaptcha', array(
'label' => 'Beveiligingscode',
'attr' => array(
'options' => array(
'theme' => 'white',
'type' => 'image'
)
)
)
)
->add('save', 'submit', array('label' => 'Opslaan'))
->getForm();
$form->handleRequest($request);
if($request->isMethod('POST'))
{
if ($form->isValid())
{
$hash = new MessageDigestPasswordEncoder('sha512', true, 5000);
$signup->setUsername($form["username"]->getData());
$signup->setEmail($form["email"]->getData());
$signup->setFirstname($form["firstname"]->getData());
$signup->setLastname($form["lastname"]->getData());
$signup->setGender($form["gender"]->getData());
$signup->setBirthday($form["birthday"]->getData());
$signup->setPassword($hash->encodePassword($signup->getPassword(), $signup->getUsername()));
$signup->setRegdate(new \DateTime('now'));
$em = $this->getDoctrine()->getManager();
$em->persist($signup);
$em->flush();
return $this->redirectToRoute('success');
}
}
return $this->render('signup/signup.html.twig', array('form' => $form->createView()));
}
/**
* @Route("signup/success/", name="success")
*/
public function successAction(Request $request)
{
return new Response('Dit was een success!');
}
}
?>
Twig:
{# app/Resources/views/signup/signup.html.twig #}
{% extends 'base.html.twig' %}
{% block body %}
<fieldset>
<legend>Registreren</legend>
{{ form_start(form) }}
{{form_label(form.username)}} {{form_widget(form.username)}}<br />
{{ form_errors(form.username) }}
{{form_label(form.email)}} {{ form_widget(form.email) }}<br />
{{ form_errors(form.email) }}
{{form_label(form.firstname)}} {{ form_widget(form.firstname) }}<br />
{{ form_errors(form.firstname) }}
{{form_label(form.lastname)}} {{ form_widget(form.lastname) }}<br />
{{ form_errors(form.lastname) }}
{{form_label(form.gender)}} {{ form_widget(form.gender) }}<br />
{{ form_errors(form.gender) }}
{{form_label(form.birthday)}}
{{ form_widget(form.birthday.day) }}
{{ form_widget(form.birthday.month) }}
{{ form_widget(form.birthday.year) }}<br />
{{ form_errors(form.birthday) }}
{% for passwordField in form.password %}
{{ form_label(passwordField, null, { 'attr': {'class': 'form-label'} }) }}
{{ form_widget(passwordField, { 'attr': {'class': 'form-input'} }) }}<br />
{{ form_errors(passwordField) }}
{% endfor %}
{{ form_label(form.recaptcha) }} {{form_widget(form.recaptcha)}}<br />
{{ form_widget(form.save) }}
{{ form_end(form) }}
</fieldset>
{% endblock %}
Alvast bedankt iig!