Score:0

จะตรวจสอบได้อย่างไรว่าเป็นเส้นทางสำหรับการดู

ธง in

ฉันมีรายการของเส้นทางและฉันต้องการระบุว่ารายการใดเชื่อมโยงกับการดูเส้นทาง

มีวิธีการใด ๆ ของ Drupal 8 ที่ฉันสามารถใช้ได้หรือไม่? ฉันจำเป็นต้องดูเส้นทางการดูทั้งหมดหรือไม่ จากนั้นตรวจสอบว่าเส้นทางใดเชื่อมโยงกับเส้นทางที่ฉันมี

ru flag
'เส้นทางการดู' คืออะไร
leymannx avatar
ne flag
สิ่งนี้ตอบคำถามของคุณหรือไม่ [รับชื่อเส้นทางของหน้าปัจจุบัน](https://drupal.stackexchange.com/questions/202831/get-the-route-name-of-the-current-page)
leymannx avatar
ne flag
คุณช่วยตรวจสอบชื่อเส้นทางปัจจุบันและดูว่ามีชื่อระบุใดๆ เช่น `*.view.*` หรืออะไรก็ตามที่คุณสามารถใช้ได้หรือไม่
sonfd avatar
in flag
ดูเส้นทางเพจมีชื่อเส้นทางในรูปแบบ: `view.VIEW_ID.DISPLAY_ID`
4uk4 avatar
cn flag
แปลงเป็นวัตถุ URL ดู https://drupal.stackexchange.com/questions/190036/how-do-i-convert-a-string-like-node-1-into-a-routematch-or-url-object
user3560198 avatar
in flag
ขอบคุณ @ 4k4 ฉันจะลองวิธีแก้ปัญหาของคุณเช่นกัน
Score:3
ธง in

ฉันคิดว่าวิธีที่ดีที่สุดในการทำเช่นนี้คือการใช้ router.route_provider บริการ. โดยเฉพาะอย่างยิ่ง คุณอาจต้องการใช้ RouteProvider::getRoutesByPattern(). ดูโค้ดต่อไปนี้ ดัดแปลงมาจากโค้ดที่แสดงอยู่ใน ความคิดเห็นของโจอาคิม ใน รับชื่อเส้นทางตามเส้นทางใน Drupal 8.

ฟังก์ชัน getViewPaths (อาร์เรย์ $paths_to_check = []): อาร์เรย์ {
  /** @var \Drupal\Core\Routing\RouteProviderInterface $route_provider */
  $route_provider = \Drupal::service('router.route_provider');

  $view_paths = [];
  foreach ($paths_to_check เป็น $path) {
    $path_route_collection = $route_provider->getRoutesByPattern($เส้นทาง);
    foreach ($path_route_collection->all() เป็น $route_name => $route) {
      ถ้า (strpos($route_name, 'ดู') === 0) {
        $view_paths[] = $เส้นทาง;
      }
    }
  }

  ส่งคืน $view_paths;
}

$my_view_paths = getViewPaths([
  '/เกี่ยวกับ',
  '/บาง/อื่นๆ/เส้นทาง',
  '/ อีกหนึ่งเส้นทาง',
]);
user3560198 avatar
in flag
สวัสดี sonfd ขอบคุณมากสำหรับวิธีแก้ปัญหาของคุณ ฉันคิดว่ามันควรจะตอบสนองวัตถุประสงค์ของฉัน
Score:1
ธง us

หากรายการมีเส้นทางเช่น /node/2, /user/1 หรือ admin/content และคุณจำเป็นต้องได้รับชื่อเส้นทางสำหรับเส้นทางเหล่านั้นที่จัดการโดยโมดูล Views คุณสามารถใช้รหัสที่คล้ายกับรหัสต่อไปนี้

ใช้ Drupal\Core\Path\PathValidatorInterface;
ใช้ Drupal\Core\Url;

ฟังก์ชัน _view_routes (เส้นทาง $ อาร์เรย์) {
  $view_routes = [];
  $path_validator = \Drupal::service('path.validator');

  foreach (เส้นทาง $ เป็นเส้นทาง $) {
    $view_route = '';
    ถ้า ($url = $path_validator->getUrlIfValid($path)) {
      $route_name = $url->getRouteName();
      ถ้า (strpos($route_name, 'ดู') === 0) {
        $view_route = $route_name;
      }
    }
    $view_routes[$path] = $view_route; 
  }

  ส่งคืน $view_routes;
}

PathValidator::getUrlIfValid() คืน URL คัดค้านหากเส้นทางที่ได้รับเป็นอาร์กิวเมนต์นั้นถูกต้องและเข้าถึงได้จากผู้ใช้ที่เข้าสู่ระบบในปัจจุบัน เพื่อทำความเข้าใจว่าพาธใดสำหรับเพจที่จัดการโดยโมดูล Views โค้ดควรคล้ายกับโค้ดต่อไปนี้

ใช้ Symfony\Component\Routing\Matcher\RequestMatcherInterface;

ฟังก์ชัน _view_routes (เส้นทาง $ อาร์เรย์) {
  $view_routes = [];
  $router = \Drupal::service('router.no_access_checks');

  foreach (เส้นทาง $ เป็นเส้นทาง $) {
    พยายาม {
      $match = $router->match($path);
    }
    จับ (\ ข้อยกเว้น $e) {
      // เส้นทางไม่ถูกต้องหรือเมธอด HTTP ในการเข้าถึง
      // ไม่อนุญาตให้ใช้เส้นทาง
      $view_routes[$path] = '';
      ดำเนินต่อ;
    }

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

  ส่งคืน $view_routes;
}
user3560198 avatar
in flag
ขอบคุณ @apaderno สำหรับวิธีแก้ปัญหาของคุณ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา