Рейтинг:2

What is the route for a specific node?

флаг 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
флаг cn
Посмотрите ответ от @sonfd и переопределите `getRouteParameters()`, чтобы вернуть массив параметров с идентификатором узла.
Рейтинг:6
флаг in

Если что-то не переопределяет маршрутизацию, маршрут для всех узлов entity.node.canonical.

Маршруту нужен параметр route_parameter, узел, пройти нид.

Например, вы можете создать ссылку на страницу узла с Ссылка:: createFromRoute() нравиться:

$my_link = Link::createFromRoute('Текст моей ссылки', 'entity.node.canonical', [
  'узел' => 123,
]);

Как указал @4k4, вам нужно создать класс LoginLogoutMenuLink получитьимя_маршрута() и получить параметры маршрута () методы.

публичная функция getRouteName() {
  если ($this->currentUser->isAuthenticated()) {
    вернуть 'user.logout';
  }
  еще {
    вернуть 'entity.node.canonical';
  }
}

публичная функция getRouteParameters() {
  // Не уверен, что это лучшее условие для использования здесь.
  если ($this->getRouteName() == 'entity.node.canonical') {
    возвращаться [
      'узел' => 123,
    ];
  }

  вернуть parent::getRouteParameters();
}
Free Radical avatar
флаг kz
Спасибо! Мне просто пришлось немного изменить его, чтобы заставить его работать. Смотрите обновленные квесты для рабочей версии.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.