2013-06-21 18 views
8

Tôi muốn tạo Điều hướng từ Cơ sở dữ liệu của tôi, nơi tôi lưu trữ tên của các tuyến đường làm mục tiêu liên kết. Bộ điều khiển của tôi chỉ cần tải tất cả các mục điều hướng cần thiết từ cơ sở dữ liệu và trả về các hàng được sử dụng trực tiếp trong mẫu của tôi.Kiểm tra nếu tuyến đường tồn tại trong Mẫu Twig (Symfony 2)

/** 
* @Route("/") 
* @Template() 
*/ 
public function myAction() { 
    $em = $this->getDoctrine()->getManager(); 
    $navi = $em->getRepository('myBundle:Navigation')->findAll(); 
    return array("navi" => $navi); 
} 

Như vậy có khả năng rằng một con đường không tồn tại mà kết quả trong Lỗi 500.

Tôi cần một phương pháp để kiểm tra thời tiết một con đường mang tên tồn tại hay không. Tôi đã thử kiểm tra nó với {% if path('routeName') is defined %} ... {% endif %} nhưng điều này không hoạt động.

AFAIK Bộ điều khiển của tôi có thể nắm bắt các ngoại lệ Twig nhưng tôi chỉ muốn cắt bớt bỏ qua các mục điều hướng không hợp lệ. Bất kỳ ý tưởng?

+0

có thể trùng lặp của [Kiểm tra url trước khi chuyển hướng symfony2] (http://stackoverflow.com/questions/14136484/check-url-before-redirect-symfony2) –

Trả lời

12

Bạn có thể thực hiện chức năng tùy chỉnh cành (kiểm tra this liên kết để biết thêm thông tin). Chức năng kiểm tra là tên đã cho một tuyến đường hợp lệ:

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; 
} 

Nhưng tôi không chắc là bạn nên xử lý điều hướng theo cách như vậy (trong cơ sở dữ liệu). Có lẽ bạn nên sử dụng cái gì khác?

+0

Cảm ơn , bây giờ nó hoạt động! Điều đó đã giúp tôi rất nhiều. Caching các mục chuyển hướng để lấy tải ra khỏi cơ sở dữ liệu sẽ là bước tiếp theo. – user2476294

+0

'return null === $ router-> getRouteCollection() -> get ($ name);' là đủ tốt. :) – HelpNeeder

+3

@HelpNeeder Tôi muốn nói 'return null! == $ router-> ...' :) – Hast

0

Ngoài ra Bạn có thể kiểm tra:

$router = $this->container->get('router'); 
try { 
    dump($router->generate('HomePage')); 
} catch (RouteNotFoundException $e) { 
    dump('Oh noes, route "HomePage" does not exists!'); 
} 
Các vấn đề liên quan