Puncte:0

Redați câmpul personalizat din formularul de înregistrare a utilizatorului

drapel zm

Încerc să redau un câmp personalizat care apare în formularul de înregistrare a utilizatorului într-un formular nou separat care creează utilizatori cu un anumit rol cu ​​permisiuni specifice.

Am totul de lucru, cu excepția faptului că pot reda acest câmp personalizat.

Când văd câmpul din pagina de setări a formularului de înregistrare a utilizatorului, se spune că este un câmp de referință pentru entitate. Când se redă, are 4 casete de selectare.

Mi-am dat seama cum să delimitez câmpurile care sunt în formularul de înregistrare a utilizatorului din noul meu formular, dar nu îmi pot da seama cum să-l redau pe cel specific de care am nevoie.

$entityTypeManager = \Drupal::service('entity_field.manager');
$fields = $entityTypeManager->getFieldDefinitions('utilizator', 'utilizator');

foreach ($fields ca $field_name) {
  kint($nume_câmp);
}

Asta îmi oferă o listă a tuturor câmpurilor din înregistrarea utilizatorului.

Simt că îmi lipsește ceva foarte evident.

4uk4 avatar
drapel cn
În mod normal, ați crea un mod de formular personalizat și ați configura widget-urile de câmp de care aveți nevoie. Cred că pui întrebarea pentru că ai construit forma de la zero. Acest lucru este ușor pentru tipurile de câmp simple, dar multă muncă pentru cele complexe.
drapel zm
Da, este o construcție de la zero într-un modul. Acest lucru trebuie să fie lansat și pornit în producție, asupra căruia avem control minim din cauza unui client federal. Găsesc foarte puține despre crearea de formulare de înregistrare personalizate și reutilizarea câmpurilor din formularele de utilizator.
Puncte:2
drapel cn

Un mod de formular este o configurație pe care o puteți rula prin CMI (drush cex/cim) sau o puteți instala cu modulul prin includerea fișierelor YAML în folderul de configurare a modulelor.

Implementarea unui nou mod de formular de înregistrare nu este foarte intuitivă. Cele elementare:

  1. Creați modul formular:

    /admin/structure/display-modes/form
    
  2. Activați și configurați-l ca în aceste întrebări pentru cele preinstalate Inregistreaza-te modul formular:

    Cum să ascund câmpurile personalizate din formularul de înregistrare?

  3. Pentru a plasa noul mod de formular pe o pagină, aveți nevoie fie de un modul contrib

    https://www.drupal.org/project/form_mode_manager

    sau cod personalizat:

    Cum încarc un formular cu o anumită afișare a formularului (mod formular)?

    sau un traseu personalizat:

    mymodule.routing.yml

    mymodule.register2:
      cale: „/admin/people/ch-create”
      implicite:
        _entity_form: „user.register2”
        _title: „Creați un cont nou”
      cerinte:
        _permission: „înregistrați anumiți utilizatori”
    

    registrul2 trebuie să fie înregistrat ca handler de formular în tipul de entitate:

    mymodule.modul

    funcția mymodule_entity_type_build(array &$entity_types) {
      $entity_types['user']->setFormClass('register2', 'Drupal\user\RegisterForm');
    }
    
drapel zm
Ok, dacă vă înțeleg bine, formularul de înregistrare a utilizatorului are un mod de formular care nu este accesibil fără să treceți prin niște cercuri (adică folosind acest modul contrib). Este corect? Aș prefera să codific acest lucru în loc să mă sprijin pe un modul contrib, dar mai întâi permiteți-mi să mă uit la asta puțin. Modulele Contrib trebuie să fie aprobate și semnate (doar firul unor clienți alimentați).
4uk4 avatar
drapel cn
Modul de formular *Înregistrare* preinstalat este singurul mod de formular care funcționează imediat fără cod suplimentar. Pentru un mod de formular personalizat, cum ar fi *Register 2*, aveți nevoie de **fie** un modul contrib **sau** cod personalizat.
drapel zm
Deci încă mă învârt în jurul asta. Nu încerc cu adevărat să creez un nou mod de formular. Sunt bine cu utilizarea modului de formular de înregistrare din cutie.Încerc doar să obțin un câmp de referință de entitate care a fost adăugat la formularul de înregistrare a utilizatorului într-un al doilea formular de înregistrare a utilizatorului care creează un utilizator cu un rol unic. Pot accesa tot felul de informații despre câmp prin kint, dar nu pot face ca acesta să fie randat din funcția buildForm. Orice altceva este bine. Bănuiesc că nu înțeleg cum este nevoie de un mod de formular aici dacă pot accesa datele câmpului.
drapel zm
FYI.... modulul contrib are unele erori și nu funcționează în Drupal 9 acum, se pare.
4uk4 avatar
drapel cn
Aceste două soluții sunt doar exemple pentru a clarifica ceea ce trebuie făcut, există o gamă largă de alte soluții pentru pasul 3, cum ar fi construirea unui traseu de formular personalizat. Dacă sunteți blocat în acest moment, puneți o întrebare cu detalii unde doriți să plasați al doilea formular pe site-ul dvs.
drapel zm
Aha, înțeleg. De fapt....am lăsat deoparte acel detaliu. Acesta este un formular de administrare.Cu alte cuvinte, nu este accesibil de utilizatori anonimi. Cazul de utilizare este că doresc să lase pe cineva să adauge utilizatori cu un anumit rol, dar nu doresc să le ofere acces la formularul complet de înregistrare. Am acel formular complet construit și funcționează, cu excepția faptului că am nevoie de un câmp din formularul principal de înregistrare care este un câmp de referință pentru entitate. Calea către formular este /admin/people/ch-create și totul este generat de modulul pe care l-am scris. Sunt blocat să obțin acest câmp. Nu am găsit multe despre reutilizarea programatică a câmpurilor.
4uk4 avatar
drapel cn
OK, apoi creați o rută de formular de entitate pentru cale. Vezi răspunsul editat.
drapel zm
Mulțumesc pentru răbdarea ta cu mine. Nu prea am realizat ceea ce mi-am dorit. Nu am reușit niciodată să-mi dau seama cum să încărc un singur câmp din formularul principal de înregistrare într-un nou formular de înregistrare din partea de administrator. Din nou, există foarte puțină documentație despre reutilizarea programatică a câmpurilor. Dar acest lucru m-a ajutat să recreez complet formularul principal de înregistrare și doar l-am modificat în funcție de nevoile mele și i-am atribuit roluri după finalizare. Vă mulţumesc pentru ajutor!

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.