Puncte:0

Modificați matricea de randare a unui controler prin KernelEvents::VIEW

drapel jp

Încerc să modific ieșirea unui controler de modul contrib prin KernelEvents::VIEW. Vreau să afișez ieșirea de la controler și să atașez marcajul returnat de la handlerul de evenimente. Acesta este codul pe care îl folosesc, dar nu funcționează conform așteptărilor.

clasa BuildAlter implementează EventSubscriberInterface {

  funcția publică alterBuild(ViewEvent $event) {
    $build = $event->getControllerResult();
    $build['conținut'] = [
      '#type' => 'markup',
      '#markup' => '<p>Adăugat de ControllerAlterSubscriber.</p>'
    ];

    $event->setControllerResult($build);
  }

  funcție publică statică getSubscribedEvents() {
    întoarcere [
      // Evenimentul VIEW are loc când valoarea returnată a unui controler
      // nu este o instanță de răspuns.
      KernelEvents::VIEW => ['alterBuild', 50],
    ];
  }

}
4uk4 avatar
drapel cn
Trebuie să înregistrați serviciul în *.services.yml. Vedeți https://drupal.stackexchange.com/questions/281093/is-there-a-best-practice-for-overriding-a-contributed-modules-controller-in-d/281158#281158
Nicholas avatar
drapel jp
Problema, $build['conținut'] nu este referit în creanga principală pe care vreau să o modific, vezi mai jos cum este scos conținutul în twig. `{{ last_checked }}` {% pentru project_type în project_types %} {{ tip_proiect.tabel }} {% altfel %} {% endfor %} ` Ar trebui să deschid o problemă pentru a scoate $build['content'] pentru acel fișier twig, astfel încât alți ascultători de evenimente să poată modifica/adaugă ieșirea prin intermediul tastei 'content'? M-am pierdut.
drapel cn
_Ar trebui să deschid o problemă_ Nu cred că ar fi potrivit, nu există nimic în convenție sau cea mai bună practică care să spună că o variabilă „conținut” trebuie utilizată pentru un șablon Twig. Poate că ați putea să vă gândiți să modificați traseul și să vă construiți propria vizualizare pe baza originalului și a modificărilor dvs.?
4uk4 avatar
drapel cn
Marcajul în „conținut” este propriul element de randare. O variabilă ar fi `#content` dacă este plasată cu un șablon `#theme`.
Nicholas avatar
drapel jp
Mulțumesc @Clive, voi folosi această abordare
apaderno avatar
drapel us
Clasa [`ViewEvent`](https://api.drupal.org/api/drupal/vendor%21symfony%21http-kernel%21Event%21ViewEvent.php/class/ViewEvent/9.2.x) este disponibilă numai pe Drupal 9 Pe Drupal 8, clasa de utilizat este [`GetResponseForControllerResultEvent`](https://api.drupal.org/api/drupal/vendor%21symfony%21http-kernel%21Event%21GetResponseForControllerResultEvent.php/class/ForetResultEvent.php/drupal/vendor%21symfony%21http-kernel%21Event%21GetResponseForControllerResultEvent.php/class/ForetResultResult. X). Codul de bază Drupal nu ajută prea mult la înțelegerea modului de implementare a acelui handler de evenimente. Niciunul dintre handlerele de evenimente implementate de nucleul Drupal nu utilizează `setControllerResult()`.
apaderno avatar
drapel us
Privind codul de bază Drupal utilizat pentru acel tip de handler de evenimente, pot doar să înțeleg că handlerul de evenimente nu ar trebui să presupună că valoarea returnată de la `$event->getControllerResult()` este o matrice. `RenderArrayNonHtmlSubscriber::onRespond()` și `MainContentViewSubscriber::onViewRenderArray()` verifică dacă valoarea returnată este o matrice și presupunem că este o matrice de randare. `PsrResponseSubscriber::onKernelView()` verifică valoarea returnată implementează `ResponseInterface`.

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.