Puncte:1

Care este cea mai bună practică pentru transmiterea parametrilor de rutare?

drapel ae

În submitForm() vreau să redirecționez către un controler și să transmit valorile formularului. Valorile formularului sunt toate matrice, btw.

Aici este submitForm.

funcția publică submitForm(matrice &$form, FormStateInterface $form_state) {
    // obține valori
    $demo_values ​​= $form_state->getValue('demo');
    $data_set_value = $form_state->getValue('data_set');
    $grade_inginerie1 = $form_state->getValue('grade_ingineria1');
    $grade_inginerie2 = $form_state->getValue('grade_inginerie2');
    $grade_inginerie3 = $form_state->getValue('grade_inginerie3');
    $grade_inginerie4 = $form_state->getValue('grade_ingineria4');
    $grade_de_știință_fizică = $form_state->getValue('grade_de_știință_fizică');

   
    # setați datele formularului în redirecționarea URL
    $params = ['demos' => $demo_values,
      'data_set' => $data_set_value,
      'engineering_degrees1' => $engineering_degrees1,
      'engineering_degrees2' => $engineering_degrees2,
      'engineering_degrees3' => $engineering_degrees3,
      'engineering_degrees4' => $engineering_degrees4,
      'grade_de_știință_fizică' => $grade_de_știință_fizică];
    $form_state->setRedirect('stats_degrees.render_chart',$params);
  }
}

Aici este fișierul meu de rutare YML.

stats_degrees.render_form:
  cale: „/statistici/stats-degrees”
  implicite:
    _title: „Diplome de inginerie și științe fizice obținute de membrii grupurilor subreprezentate”
    _form: „\Drupal\stats_degrees\Form\StatsDegreesForm”
  cerinte:
      _permission: „accesează conținut”
stats_degrees.render_chart:
  cale: „/statistics/stats-degrees-chart/{demos}/{data_set}/{engineering_degrees1}/{engineering_degrees2}/{engineering_degrees3}/{engineering_degrees4}/{physical_science_degrees}”
  implicite:
    _controller: „\Drupal\stats_degrees\Controller\StatsDegreesController::stats_degrees_chart”
  cerinte:
    _permission: „accesează conținut”

Iată apelul meu la metoda Controller.

funcția publică stats_degrees_chart($demos,$data_set,$engineering_degrees1,$engineering_degrees2,$engineering_degrees3,$engineering_degrees4,$physical_science_degrees) {

În prezent, trimite o eroare 500 după ce trimit formularul. Există o modalitate mai bună de a transmite parametrii controlerului?

Jaypan avatar
drapel de
Care este eroarea? Uită-te în jurnalele tale.
drapel by
Ceea ce faci ar trebui să meargă, cred. Ce se întâmplă dacă accesați /statistics/stats-degrees-chart/ cu valorile parametrilor în adresa URL? Puteți depana pentru a vedea la ce adresă URL încearcă să ajungă redirecționarea formularului?
Puncte:2
drapel cn

Cea mai bună practică pentru a transmite parametrii controlerului se bazează pe opinie și depinde de cazul de utilizare, așa că încerc să acopăr toate abordările posibile.

În general, există alte trei moduri de a transmite parametri controlorilor, șir de interogare, date POST și SESSIUNE. Puteți serializa matricele pentru șirul de interogare, dar mai ușor ar fi POST sau SESSION.

Vedea Cum să obțineți parametrii $_POST și $_GET într-un controler.

Dacă utilizați valori de sesiune, dezactivați-le la sfârșitul controlerului, deoarece valorile de sesiune care nu mai sunt necesare sunt dăunătoare pentru stocarea în cache. Vedea Cum pot distruge sau anula sesiunea?.

În special pentru forme există mai multe. Dacă scopul formularului este de a stoca valorile în baza de date (permanent într-o entitate sau temporar într-un temporar store), faceți acest lucru mai întâi și apoi faceți referire la elementul bazei de date printr-un parametru de rutare.

Dacă nu doriți să stocați datele, ar putea avea sens să postați datele direct la controlor, deoarece nu puteți atașa date POST la o redirecționare de trimitere.

Nu aveți neapărat nevoie de un controler, puteți reconstrui formularul afișând graficul de sub formular sau înlocuindu-l. Vedea Cum afișez rezultatul pe aceeași pagină după ce trimit formularul?

Puncte:1
drapel fr

Puteți folosi un magazin de temperatură privat. Vezi de exemplu http://karimboudjema.com/en/drupal/20190315/saving-temporary-values-form-private-tempstore-drupal-8

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.