2013-06-21 6 views
8

में मार्ग मौजूद है, तो मैं अपने डेटाबेस से एक नेविगेशन उत्पन्न करना चाहता हूं जहां मैं लिंक मार्गों के रूप में अपने मार्गों के नाम संग्रहीत करता हूं। मेरा नियंत्रक बस डेटाबेस से सभी आवश्यक नेविगेशन प्रविष्टियां प्राप्त करता है और पंक्तियों को वापस देता है जो सीधे मेरे जुड़वां टेम्पलेट में उपयोग किए जाते हैं।परीक्षण करें यदि टिग टेम्पलेट (सिम्फनी 2)

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

इस प्रकार वहाँ संभावना है कि एक मार्ग मौजूद नहीं है जो त्रुटि 500 ​​

मैं एक प्रणाली की जरुरत मौसम नामांकित मार्ग है या नहीं की जाँच करने में जो परिणाम है। मैंने इसे {% if path('routeName') is defined %} ... {% endif %} के साथ परीक्षण करने का प्रयास किया लेकिन यह काम नहीं करता है।

AFAIK मेरा नियंत्रक ट्विग अपवादों को पकड़ सकता है लेकिन मुझे सिर्फ को नेविगेशन प्रविष्टियों को अनदेखा करना चाहिए जो मान्य नहीं हैं। कोई उपाय?

+0

की [URL की जाँच से पहले symfony2 अनुप्रेषित] संभावित डुप्लिकेट (http://stackoverflow.com/questions/14136484/check-url-before-redirect-symfony2) –

उत्तर

12

आप एक कस्टम ट्विग फ़ंक्शन कर सकते हैं (अधिक जानकारी के लिए this लिंक देखें)। समारोह है कि जाँच करता दिए गए नाम के एक वैध मार्ग है:

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

लेकिन मुझे यकीन है यह एक अच्छा विचार इस तरह से नेविगेशन (डेटाबेस में) को संभालने के लिए है नहीं कर रहा हूँ। शायद आप कुछ और बेहतर इस्तेमाल करेंगे?

+0

धन्यवाद , अब यह काम कर रहा है! उससे मुझे बहुत सहायता मिली। डेटाबेस से लोड लेने के लिए नेविगेशन प्रविष्टियों को कैशिंग करना अगला चरण होगा। – user2476294

+0

'वापसी शून्य === $ राउटर-> getRouteCollection() -> प्राप्त करें ($ नाम);' काफी अच्छा है। :) – HelpNeeder

+3

@ हेल्पनिडर मैं कहूंगा कि 'वापसी शून्य! == $ राउटर-> ... :) – Hast

0

इसके अलावा आप देख सकते हैं:

$router = $this->container->get('router'); 
try { 
    dump($router->generate('HomePage')); 
} catch (RouteNotFoundException $e) { 
    dump('Oh noes, route "HomePage" does not exists!'); 
}