Trong Drupal 8, tôi cần xác minh một tuyến có tồn tại hay không trong một mô-đun tùy chỉnh. Làm thế nào tôi có thể đạt được điều này?
Trong Drupal 8, tôi cần xác minh một tuyến có tồn tại hay không trong một mô-đun tùy chỉnh. Làm thế nào tôi có thể đạt được điều này?
Câu trả lời:
/* @var \Drupal\Core\Routing\RouteProviderInterface $route_provider */
$route_provider = \Drupal::service('router.route_provider');
$route_provider->getRouteByName('abc.xyz');
RouteProviderInterface::getRouteByName()
trả về một \Symfony\Component\Routing\Route
đối tượng nếu nó tồn tại hoặc ném ngoại lệ nếu nó không tồn tại.
Bạn có thể sử dụng RouteProviderInterface::getRoutesByNames()
nếu bạn không muốn có ngoại lệ.
$exists = count($route_provider->getRoutesByNames(['abc.xyz'])) === 1;
Để kiểm tra tuyến tồn tại hay không sử dụng chức năng dưới đây:
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
, đó không phải là một hàm, mà là một phương thức của một lớp. Bạn không nói chính xác lớp nào.
(null === $router->getRouteCollection()->get($name)) ? false : true
là phức tạp không cần thiết. Không cần một hoạt động ternary, vì ===
trả về đã là một boolean.
getRoutesByNames()
vẫn có thể đưa ra một ngoại lệ, nếu nó nhận được một mảng trống làm tham số. Trong trường hợp các mảng được tạo động, tốt hơn hết là bẫy ngoại lệ hoặc xác minh mảng được truyền cho phương thức không trống.