• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Symfony po dodaniu grup walidacji, walidacja przestaje działać.

Mały hosting, OGROMNE możliwości
0 głosów
583 wizyt
pytanie zadane 16 marca 2016 w PHP przez Else Stary wyjadacz (12,260 p.)

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.

1 odpowiedź

0 głosów
odpowiedź 17 marca 2016 przez event15 Szeryf (93,790 p.)
A masz jakiś komunikat błędu? Sprawdzałeś logi Apache? Włączyłeś raportowanie błędów na poziomie notice?
komentarz 17 marca 2016 przez event15 Szeryf (93,790 p.)
Rozumiem, że obsługujesz ten orm z konsoli i robisz tam jakiś update? Czy w jakiś inny sposób?
komentarz 17 marca 2016 przez Else Stary wyjadacz (12,260 p.)
Tak z konsoli
komentarz 18 marca 2016 przez event15 Szeryf (93,790 p.)
Pytałem także o inne rzeczy. Masz jakies logi błędów? Konsola bezbłędnie odpala? Coś mówi kiedy robisz validate?

Podobne pytania

0 głosów
2 odpowiedzi 315 wizyt
0 głosów
1 odpowiedź 222 wizyt
+1 głos
1 odpowiedź 266 wizyt
pytanie zadane 13 marca 2016 w PHP przez elaen Gaduła (4,760 p.)

93,718 zapytań

142,631 odpowiedzi

323,262 komentarzy

63,266 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...