Witam, podczas pisania aplikacji w symfony wystąpił u mnie błąd którego nie potrafie rozwiązać. Stworzyłem encje User, i wykorzystuje ją przy rejestracji, logowaniu, zmianie nicku itd. Żeby walidacja działała poprawnie dodałem do reguł walidacji grupy, ale po tym zabiegu walidacja przestaje działać i formularz przepuszcza nawet puste pola wywalając błąd, że podczas dodawania rekordu wystąpił błąd bo pola nie mogą być puste itd.
Oto mój kod:
<?php
namespace PageBundle\Entity;
use Symfony\Component\Security\Core\User\AdvancedUserInterface;
use Symfony\Component\Security\Core\User\UserInterface;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* @ORM\Entity(repositoryClass="PageBundle\Repository\UserRepository")
* @ORM\Table(name="users")
*
* @UniqueEntity(fields={"username"})
* @UniqueEntity(fields={"email"})
*/
class User implements AdvancedUserInterface, \Serializable
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*
*/
private $id;
/**
* @ORM\Column(type="string", length=20, unique=true)
*
* @Assert\NotBlank(
* groups = {"Registration", "ChangeDetails"}
* )
*
* @Assert\Length(
* min=5,
* max=20,
* groups = {"Registration", "ChangeDetails"}
* )
*/
private $username;
/**
* @ORM\Column(type="string", length=120, unique=true)
*
* @Assert\NotBlank(groups={"Registration"})
*
* @Assert\Email(
* groups={"Registration"}
* )
*
* @Assert\Length(
* max = 120,
* groups={"Registration"}
* )
*/
private $email;
/**
* @ORM\Column(type="string", length=64)
*/
private $password;
/**
* @Assert\NotBlank(
* groups={"Registration"}
* )
*
* @Assert\Length(
* min = 8,
* groups={"Registration"}
* )
*/
private $plainPassword;
/**
* @ORM\Column( name="account_non_expired", type="boolean")
*/
private $accountNonExpired =true;
/**
* @ORM\Column( name="account_non_locked", type="boolean")
*/
private $accountNonLocked = true;
/**
* @ORM\Column( name="credentials_non_expired", type="boolean")
*/
private $credentialsNonExpired = true;
/**
* @ORM\Column(type="boolean")
*/
private $enabled =false;
/**
* @ORM\Column(type="array")
*/
private $roles;
/**
* @ORM\Column(name="action_token", type="string", length=20, nullable=true)
*/
private $actionToken;
/**
* @ORM\Column(name="register_date", type="datetime")
*/
private $registerDate;
private $avatarFile;
//dalej są getery i setery
Formularz rejestracji wygląda tak:
<?php
namespace PageBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
class RegisterUserType extends AbstractType{
public function getName() {
return 'userRegister';
}
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('email', EmailType::class, array(
'label' => 'E-mail'
))
->add('username', TextType::class, array(
'label' => 'Nick'
))
->add('plainPassword', RepeatedType::class, array(
'type' => PasswordType::class,
'first_options' => array(
'label' => 'Hasło'
),
'second_options' => array(
'label' => 'Powtórz hasło'
)
))
->add('submit', SubmitType::class, array(
'label' => 'Zarejestruj'
));
}
public function setDefaultOptions(OptionsResolver $resolver) {
$resolver->setDefaults(array(
'data_class' => 'PageBundle\Entity\User',
'validation_groups' => array('Default', 'Registration')
));
}
}
Od kilku dni szukam rozwiązania, ale na razie pomaga tylko kiedy usuwam z encji user wszystkie wzmianki o grupach.
Dzięki za pomoc,
Else.