Điểm:2

What is the route for a specific node?

lá cờ 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
lá cờ cn
Xem câu trả lời từ @sonfd và ghi đè `getRouteParameters()` để trả về mảng tham số có id nút.
Điểm:6
lá cờ in

Trừ khi có thứ gì đó ghi đè định tuyến, tuyến đường cho tất cả các nút là thực thể.node.canonical.

Tuyến đường cần một route_parameter, nút, để vượt qua nid.

Ví dụ, bạn có thể tạo một liên kết đến trang của một nút với Liên kết::createFromRoute() Thích:

$my_link = Link::createFromRoute('Văn bản liên kết của tôi', 'entity.node.canonical', [
  'nút' => 123,
]);

Như @4k4 đã chỉ ra, bạn sẽ cần tạo lớp LoginLogoutMenuLink getRouteName()getRouteParameter() các phương pháp.

hàm công khai getRouteName() {
  if ($this->currentUser->isAuthenticated()) {
    trả về 'user.logout';
  }
  khác {
    trả về 'entity.node.canonical';
  }
}

hàm công khai getRouteParameter() {
  // Không chắc đây có phải là điều kiện tốt nhất để sử dụng ở đây không.
  if ($this->getRouteName() == 'entity.node.canonical') {
    trở lại [
      'nút' => 123,
    ];
  }

  trả về cha mẹ::getRouteParameters();
}
Free Radical avatar
lá cờ kz
Cảm ơn! Tôi chỉ phải sửa đổi nó một chút để làm cho nó hoạt động. Xem yêu cầu cập nhật cho phiên bản làm việc.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.