Puncte:2

What is the route for a specific node?

drapel kz

I want to override the user.login route that points to the default login page.

I.e. I want that a user who presses the default "Log in" link for the site to be directed to a node that provides some help (where the user can click on a link and arrive at the standard log-in form).

Say that the path I want to redirect to is /node/42. How can I find out what route to return for a specific node?

I believe that the right place to do this in Drupal 9 is to override the getRouteName() function the in the LoginLogoutMenuLink class. So I'm trying to create something like this.

public function getRouteName() {
  if ($this->currentUser->isAuthenticated()) {
    return 'user.logout';
  }
  else {
    return '- What to put here? - ';
  }
}

I've searched a lot, and some people say that the route for nodes are entity.node.canonical. But that does not solve it for me. I think that the route for a specific node also need to have the nid in there somewhere.

4uk4 avatar
drapel cn
Vedeți răspunsul de la @sonfd și suprascrieți `getRouteParameters()` pentru a returna matricea de parametri cu id-ul nodului.
Puncte:6
drapel in

Cu excepția cazului în care ceva suprascrie rutare, ruta pentru toate nodurile este entitate.nod.canonică.

Ruta are nevoie de un parametru route, nodul, pentru a trece nid.

De exemplu, puteți crea un link către pagina unui nod cu Link::createFromRoute() ca:

$my_link = Link::createFromRoute('Textul meu link', 'entity.node.canonical', [
  'nod' => 123,
]);

După cum a subliniat @4k4, va trebui să creați clasa LoginLogoutMenuLink getRouteName() și getRouteParameters() metode.

funcția publică getRouteName() {
  dacă ($this->currentUser->isAuthenticated()) {
    returnează „user.logout”;
  }
  else {
    returnează „entity.node.canonical”;
  }
}

funcția publică getRouteParameters() {
  // Nu sunt sigur dacă acesta este cel mai bun condițional de folosit aici.
  if ($this->getRouteName() == 'entity.node.canonical') {
    întoarcere [
      'nod' => 123,
    ];
  }

  returnează părinte::getRouteParameters();
}
Free Radical avatar
drapel kz
Mulțumiri! A trebuit doar să-l modific ușor pentru a-l face să funcționeze. Vedeți căutarea actualizată pentru versiunea de lucru.

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.