Di Drupal 8, saya perlu memverifikasi rute ada atau tidak dalam modul khusus. Bagaimana saya bisa mencapai ini?
Di Drupal 8, saya perlu memverifikasi rute ada atau tidak dalam modul khusus. Bagaimana saya bisa mencapai ini?
Jawaban:
/* @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\Route
objek 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;
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;
}
$this
, itu bukan fungsi, tetapi metode kelas. Anda tidak mengatakan kelas mana, tepatnya.
(null === $router->getRouteCollection()->get($name)) ? false : true
tidak perlu rumit. Tidak perlu operasi ternary, karena ===
pengembalian sudah menjadi boolean.
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.