Puncte:0

Cum se verifică dacă o cale este pentru o vedere?

drapel in

Am o listă de căi și aș dori să identific care sunt asociate pentru a vizualiza rutele.

Există vreo metodă Drupal 8 pe care să o pot folosi? Trebuie să obțin toate rutele de vizualizare și apoi să verific care sunt asociate căilor pe care le am?

drapel ru
Ce este o „cale de vizualizare”?
leymannx avatar
drapel ne
Răspunde asta la întrebarea ta? [Obțineți numele rutei paginii curente](https://drupal.stackexchange.com/questions/202831/get-the-route-name-of-the-current-page)
leymannx avatar
drapel ne
Vă rugăm să verificați numele actual al rutei și să vedeți dacă acesta conține vreun identificator precum `*.view.*` sau orice puteți utiliza?
sonfd avatar
drapel in
Rutele din pagina de vizualizare au nume de rute formatate ca: `view.VIEW_ID.DISPLAY_ID`
4uk4 avatar
drapel cn
Convertiți în obiecte URL. Vedeți https://drupal.stackexchange.com/questions/190036/how-do-i-convert-a-string-like-node-1-into-a-routematch-or-url-object
user3560198 avatar
drapel in
Mulțumesc @4k4, voi încerca și soluția ta.
Puncte:3
drapel in

Cred că cel mai bun mod de a face acest lucru este să folosești router.route_provider serviciu. Mai exact, poate doriți să utilizați RouteProvider::getRoutesByPattern(). Vedeți următorul cod, adaptat după codul afișat în comentariul lui Joachim în Obțineți numele rutei după cale în Drupal 8.

funcția getViewPaths(array $paths_to_check = []): matrice {
  /** @var \Drupal\Core\Routing\RouteProviderInterface $route_provider */
  $route_provider = \Drupal::service('router.route_provider');

  $view_paths = [];
  foreach ($paths_to_check ca $path) {
    $path_route_collection = $route_provider->getRoutesByPattern($cale);
    foreach ($path_route_collection->all() ca $route_name => $route) {
      if (strpos($nume_rută, „vizualizare”) === 0) {
        $view_paths[] = $cale;
      }
    }
  }

  returnează $view_paths;
}

$my_view_paths = getViewPaths([
  '/despre',
  „/unele/altul/cale”,
  „/ încă o cale”,
]);
user3560198 avatar
drapel in
Bună fiule, mulțumesc mult pentru soluție. Cred că ar trebui să-mi servească scopul.
Puncte:1
drapel us

Presupunând că lista conține căi precum /node/2, /user/1 sau admin/content și trebuie să obțineți numele rutei pentru acele căi gestionate de modulul Vizualizări, puteți utiliza cod similar cu următorul.

utilizați Drupal\Core\Path\PathValidatorInterface;
utilizați Drupal\Core\Url;

funcția _view_routes(matrice $cai) {
  $view_routes = [];
  $path_validator = \Drupal::service('path.validator');

  foreach ($cai ca $cale) {
    $view_route = '';
    if ($url = $path_validator->getUrlIfValid($cale)) {
      $nume_rută = $url->getRouteName();
      if (strpos($nume_rută, „vizualizare”) === 0) {
        $view_route = $nume_rută;
      }
    }
    $view_routes[$cale] = $view_route; 
  }

  returnează $view_routes;
}

PathValidator::getUrlIfValid() întoarce a Url obiect dacă calea pe care o primește ca argument este validă și accesibilă de la utilizatorul conectat în prezent. Pentru a înțelege ce căi sunt pentru paginile gestionate de modulul Vizualizări, indiferent de care utilizatorii au acces la pagina respectivă, codul ar trebui să fie similar cu următorul.

utilizați Symfony\Component\Routing\Matcher\RequestMatcherInterface;

funcția _view_routes(matrice $cai) {
  $view_routes = [];
  $router = \Drupal::service('router.no_access_checks');

  foreach ($cai ca $cale) {
    încerca {
      $match = $router->match($cale);
    }
    captură (\Excepție $e) {
      // Calea nu este validă sau metoda HTTP pentru a accesa
      // calea nu este permisă.
      $view_routes[$cale] = '';
      continua;
    }

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

  returnează $view_routes;
}
user3560198 avatar
drapel in
Mulțumesc @apaderno pentru soluția ta.

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.