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

symfony4 -> przypomnienie hasla

HackNation - ogólnopolski hackathon
0 głosów
336 wizyt
pytanie zadane 11 lipca 2018 w PHP przez suice Gaduła (3,960 p.)

Proponuje napisac przypomnienie hasla w sf4

Przebieg appki:

1. uzytkownik wpisuje w formularzu adres emailowy

class RemindPasswordType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('email', EmailType::class, [
            'label' => 'label.email'
        ]);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => User::class,
            'validation_groups' => [
                'remind_password'
            ]
        ]);
    }
}

Encja usera:

class User implements UserInterface
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string")
     * @Assert\NotBlank(message="default.not_blank")
     * @Assert\Email(message="default.email")
     * @AcmeAssert\ExistentEmail(groups= {"remind_password"})
     */
    private $email;

    /**
     * @ORM\Column(type="string", nullable=true)
     */
    private $remindToken;
}

ExistentEmailValidator:

class ExistentEmailValidator extends ConstraintValidator
        {
            private $userRepository;

            public function __construct(UserRepository $userRepository)
            {
                $this->userRepository = $userRepository;
            }

            public function validate($value, Constraint $constraint)
            {
                if (!$this->userRepository->findUserByEmail($value)) {
                    $this->context->buildViolation($constraint->message)->addViolation();
             }
        }

Problem:

Chcialbym, zeby formularz wyrzucil mi cala encje uzytkownika po mailu, zwraca obiekt usera z samym mailem, a entity manager traktuje ten obiekt jako zupelnie nowy, przez co przy flushu chce mi go zinsertowac. Przez co musze zlapac uzytkowwnika na nowo w controlerze ($rep->findUserByEmail($email)) co mnie totalnie nie zadowala. Domyslam sie, ze uzycie validation_groups chyba nie jest najlepszym pomyslem? W jaki poprawny sposob powinienem to zrobic?

komentarz 11 lipca 2018 przez Paweł Antyporowicz Stary wyjadacz (11,470 p.)
Pokaż kod kontrolera i routing. Ogólnie, jeżeli Entity Manger Ci dodaje rekord, zamiast go uaktualniać, to problem w tym, że Entity Manager szuka Ci obiektu w bazie danych po jego ID. Jeżeli, przesłany obiekt nie będzie miał pola ID, to Entity Manager, zamiast uaktualniać rekord w bazie danych, będzie dodawał nowy rekord do bazy danych.
Zdebuguj, dane jakie przechodzą Ci przez formularz i zobacz, czy obiekt posiada przypisanego ID czy null-a.

Pozdrawiam.
komentarz 11 lipca 2018 przez suice Gaduła (3,960 p.)
wiem jak dziala entity manager, wspomnialem ze jest dla mnie jasne dlaczego probuje insertowac :)

no wlasnie zwraca mi nulla przy id, zgaduje ze przez validation_group (jedyna grupa walidacji przy tym formie to remind_password [bez default i user])?
komentarz 11 lipca 2018 przez Paweł Antyporowicz Stary wyjadacz (11,470 p.)
A możesz mi pokazać kod kontrolera oraz routingu?
komentarz 11 lipca 2018 przez suice Gaduła (3,960 p.)
   /**
     * @Route("/forgotten", name="forgotten", methods={"GET", "POST"})
     */
    public function forgotten(Request $request): Response
    {
        $form = $this->createForm(RemindPasswordType::class);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {

            dump($form->getData());
            die;
        }
    }

 

wynik dumpa:

SecurityController.php on line 67:
User {#129758 ▼
  -id: null
  -login: null
  -plainPassword: null
  -password: null
  -email: "xxxx@gmail.com"
  -code: null
  -question: null
  -answer: null
  -coins: 0
  -logs: ArrayCollection {#129759 ▶}
  -lastActivity: DateTime @1531301869 {#129761 ▶}
  -registeredAt: DateTime @1531301869 {#129760 ▶}
  -banTime: null
  -banReason: null
  -roles: array:1 [▶]
  -remindToken: null
  -remindTokenExpires: null
}

 

 

1 odpowiedź

+1 głos
odpowiedź 11 lipca 2018 przez Paweł Antyporowicz Stary wyjadacz (11,470 p.)
Znalazłem rozwiązanie Twojego problemu, spójrz na dokumentacje:
http://symfony.com/doc/current/form/data_transformers.html

Podobne pytania

0 głosów
2 odpowiedzi 600 wizyt
pytanie zadane 6 marca 2019 w PHP przez bromba Nowicjusz (180 p.)
0 głosów
1 odpowiedź 344 wizyt
pytanie zadane 4 stycznia 2018 w PHP przez Kacper Duda Obywatel (1,970 p.)
0 głosów
1 odpowiedź 1,307 wizyt
pytanie zadane 2 czerwca 2018 w PHP przez `Krzychuu Stary wyjadacz (13,940 p.)

93,626 zapytań

142,551 odpowiedzi

323,050 komentarzy

63,130 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 1694p. - dia-Chann
  2. 1676p. - DziarnowskiJ
  3. 1650p. - Łukasz Piwowar
  4. 1640p. - CC PL
  5. 1607p. - raydeal
  6. 1602p. - Adrian Wieprzkowicz
  7. 1588p. - Tomasz Bielak
  8. 1503p. - Maurycy W
  9. 1335p. - robwarsz
  10. 1296p. - Michal Drewniak
  11. 1269p. - Rafał Trójniak
  12. 1257p. - ssynowiec
  13. 1248p. - rafalszastok
  14. 1208p. - Mariusz Fornal
  15. 1116p. - rucin93
Szczegóły i pełne wyniki

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

Kursy INF.02 i INF.03
...