Điểm:0

Làm cách nào để kiểm tra xem đường dẫn có dành cho chế độ xem không?

lá cờ in

Tôi có một danh sách các đường dẫn và tôi muốn xác định những đường dẫn nào được liên kết để xem các tuyến đường.

Có phương pháp Drupal 8 nào tôi có thể sử dụng không? Tôi có cần lấy tất cả các tuyến đường xem và sau đó kiểm tra xem tuyến đường nào được liên kết với các đường dẫn tôi có không?

lá cờ ru
`đường dẫn xem` là gì?
leymannx avatar
lá cờ ne
Điều này có trả lời câu hỏi của bạn không? [Lấy tên tuyến đường của trang hiện tại](https://drupal.stackexchange.com/questions/202831/get-the-route-name-of-the-current-page)
leymannx avatar
lá cờ ne
Bạn có thể vui lòng kiểm tra tên tuyến đường hiện tại và xem liệu nó có chứa bất kỳ số nhận dạng nào như `*.view.*` hoặc bất kỳ thứ gì bạn có thể sử dụng không?
sonfd avatar
lá cờ in
Các tuyến đường của trang xem có tên tuyến đường được định dạng như sau: `view.VIEW_ID.DISPLAY_ID`
4uk4 avatar
lá cờ cn
Chuyển đổi thành các đối tượng URL. Xem https://drupal.stackexchange.com/questions/190036/how-do-i-convert-a-string-like-node-1-into-a-routematch-or-url-object
user3560198 avatar
lá cờ in
Cảm ơn @4k4 Tôi cũng sẽ thử giải pháp của bạn.
Điểm:3
lá cờ in

Tôi nghĩ cách tốt nhất để làm điều này là sử dụng bộ định tuyến.route_provider dịch vụ. Cụ thể, bạn có thể muốn sử dụng RouteProvider::getRoutesByPattern(). Xem đoạn mã sau, được điều chỉnh từ mã hiển thị trong bình luận của joachim Trong Nhận tên tuyến đường theo đường dẫn trong Drupal 8.

hàm getViewPaths(mảng $paths_to_check = []): mảng {
  /** @var \Drupal\Core\Routing\RouteProviderInterface $route_provider */
  $route_provider = \Drupal::service('router.route_provider');

  $view_paths = [];
  foreach ($paths_to_check as $path) {
    $path_route_collection = $route_provider->getRoutesByPattern($path);
    foreach ($path_route_collection->all() as $route_name => $route) {
      if (strpos($route_name, 'view.') === 0) {
        $view_paths[] = $path;
      }
    }
  }

  trả về $view_paths;
}

$my_view_paths = getViewPaths([
  '/xung quanh',
  '/một số/khác/đường dẫn',
  '/one-more-path',
]);
user3560198 avatar
lá cờ in
Hi sonfd, cảm ơn rất nhiều cho giải pháp của bạn. Tôi nghĩ rằng nó nên phục vụ mục đích của tôi.
Điểm:1
lá cờ us

Giả sử danh sách chứa các đường dẫn như/nút/2,/người dùng/1 hoặc quản trị viên/nội dung và bạn cần lấy tên tuyến đường cho những đường dẫn đó do mô-đun Chế độ xem xử lý, bạn có thể sử dụng mã tương tự như mã sau.

sử dụng Drupal\Core\Path\PathValidatorInterface;
sử dụng Drupal\Core\Url;

hàm _view_routes(mảng $path) {
  $view_routes = [];
  $path_validator = \Drupal::service('path.validator');

  foreach ($paths as $path) {
    $view_route = '';
    if ($url = $path_validator->getUrlIfValid($path)) {
      $route_name = $url->getRouteName();
      if (strpos($route_name, 'view.') === 0) {
        $view_route = $route_name;
      }
    }
    $view_routes[$path] = $view_route; 
  }

  trả về $view_routes;
}

PathValidator::getUrlIfValid() trả về một url đối tượng nếu đường dẫn mà nó nhận làm đối số là hợp lệ và có thể truy cập được từ người dùng hiện đang đăng nhập. Để hiểu đường dẫn nào dành cho các trang được xử lý bởi mô-đun Chế độ xem, độc lập với người dùng có quyền truy cập vào trang đó, mã phải tương tự như mã sau.

sử dụng Symfony\Component\Routing\Matcher\RequestMatcherInterface;

hàm _view_routes(mảng $path) {
  $view_routes = [];
  $router = \Drupal::service('router.no_access_checks');

  foreach ($paths as $path) {
    cố gắng {
      $match = $router->match($path);
    }
    bắt (\Ngoại lệ $e) {
      // Đường dẫn không hợp lệ hoặc phương thức HTTP để truy cập
      // đường dẫn không được phép.
      $view_routes[$path] = '';
      tiếp tục;
    }

    $view_routes[$path] = (strpos($match['_route'], 'view.') === 0 ? $match['_route'] : '');
  }

  trả về $view_routes;
}
user3560198 avatar
lá cờ in
Cảm ơn @apaderno cho giải pháp của bạn.

Đă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.