Bagaimana cara memverifikasi rute yang ada?


9

Di Drupal 8, saya perlu memverifikasi rute ada atau tidak dalam modul khusus. Bagaimana saya bisa mencapai ini?

Jawaban:


10
/* @var \Drupal\Core\Routing\RouteProviderInterface $route_provider */
$route_provider = \Drupal::service('router.route_provider');
$route_provider->getRouteByName('abc.xyz');

RouteProviderInterface::getRouteByName()mengembalikan \Symfony\Component\Routing\Routeobjek jika ada, atau melempar pengecualian jika tidak.

Anda dapat menggunakan RouteProviderInterface::getRoutesByNames()jika Anda tidak ingin pengecualian.

$exists = count($route_provider->getRoutesByNames(['abc.xyz'])) === 1;

Perhatikan bahwa getRoutesByNames()masih bisa memunculkan eksepsi, jika mendapat array kosong sebagai parameter. Dalam hal array yang dibuat secara dinamis, lebih baik untuk menjebak pengecualian, atau memverifikasi array yang diteruskan ke metode tidak kosong.
kiamlaluno

Terima kasih aton @daniel & Kiamlaluno karena telah membantu ini ...
harsh_behl_0007

Terima kasih atas metode pengujiannya! Saya telah menambahkan masalah inti untuk menambahkan ini sebagai metode untuk RouteProvider: drupal.org/project/drupal/issues/3029545
oknate

6

Untuk memeriksa rute yang ada atau tidak, gunakan fungsi di bawah ini:

function routeExists($name)
{
    // I assume that you have a link to the container in your twig extension class
    $router = $this->container->get('router');
    return (null === $router->getRouteCollection()->get($name)) ? false : true;
}

1
Karena kode tersebut digunakan $this, itu bukan fungsi, tetapi metode kelas. Anda tidak mengatakan kelas mana, tepatnya.
kiamlaluno

1
Juga, (null === $router->getRouteCollection()->get($name)) ? false : truetidak perlu rumit. Tidak perlu operasi ternary, karena ===pengembalian sudah menjadi boolean.
kiamlaluno
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.