Puncte:0

utilizatorul magazinului a introdus id-ul de e-mail într-un tabel separat

drapel de

Aveți o cerință de a dezvolta modulul personalizat drupal 9 pentru a obține ID-ul de e-mail din formularul de înregistrare a utilizatorului și pentru a-l stoca în tabel separat. Am încercat funcția hook_user_presave pentru a obține ID-ul de e-mail, dar nu am reușit să-l obțin. Prin prezenta, partajarea codului

funcția save_mail_user_presave(UserInterface $user)
 {

     încerca{
                $conn = Baza de date::getConnection();
                $fields["mail"] = $user->get('mail')->value;
            $conn->insert('save_email')
                           ->fields($fields)->execute();
                  \Drupal::messenger()->addMessage($this->t(' Mulțumesc !! Dvs.>

        } catch(Excepție $ex){
                \Drupal::logger('save_email')->error($ex->getMessage());
        }

}

Oricine mă ajută să descopăr problema

apaderno avatar
drapel us
Întrebarea ar trebui să explice ce înseamnă *nu am reușit să o obțin*. Vrei să spui că, cu codul pe care îl folosești, `$fields["mail"]` nu conține e-mailul utilizatorului? Primiți vreun mesaj de eroare? Care?
apaderno avatar
drapel us
Ca o notă secundară, există două erori în codul afișat: `$this` nu poate fi folosit în afara unei metode de clasă, de exemplu în interiorul unei funcții; șirul literal transmis la `$this->t()` nu are ultimul delimitator de șir. Verificați că codul pe care îl utilizați este codul PHP corect și asigurați-vă că ați copiat corect codul din întrebare.
drapel de
Da, nu se poate prinde adresa de e-mail pe .$fields["mail "] Gol. Nu primesc nicio eroare. Mulțumesc
apaderno avatar
drapel us
Vezi al doilea comentariu al meu. Dacă folosești cu adevărat acel cod, nu va funcționa.
Puncte:0
drapel cn

Drupal 9 stochează deja adresa de e-mail la înregistrarea în init coloana a user_field_data masa. Aceasta este „adresa de e-mail din formularul de înregistrare a utilizatorului”; este diferită de adresa de e-mail a contului utilizatorului, care este stocată în Poștă coloana aceluiasi tabel.

Deci, nu este nevoie de un modul personalizat pentru aceasta; poți folosi coloană pe care Drupal îl oferă deja.

drapel de
Mulțumesc Patrick, vreau să prind adresa de e-mail chiar și la valorile de formular nevalide. Puteți sugera o modalitate de a rezolva acest lucru
apaderno avatar
drapel us
@srini În acest caz, nu puteți utiliza `hook_ENTITY_TYPE_presave()` deoarece acel hook este invocat când valorile trimise au trecut validarea. Nu este clar de ce ați stoca adresa de e-mail atunci când formularul nu trece validarea. În acest caz, veți ajunge să stocați mai multe e-mailuri pentru un singur utilizator, chiar și un șir gol.
drapel de
Doriți să capturați în același scop de analiză. Există vreo modalitate de a captura asta. Dacă funcția de presalvare nu funcționează înseamnă Vă rugăm să sugerați

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.