2010-12-19 13 views
12

मैं की तरहपकड़ने का प्रयास अपवाद नहीं पकड़ता है?

नीचे
try { 
    $user = $query->getSingleResult(); 
} catch (Doctrine\ORM\NoResultException $e) { 
    return null; 
} catch (Exception $e) { 
    return null; 
} 

getSingleResult()NoResultException फेंक देते हैं, तो कोई भी पंक्ति पाए जाते हैं कोड है। और ऐसा लगता है कि मुझे अभी भी अपवाद मिल रहा है ... पकड़ काम नहीं कर रही है। ऐसा क्यों है? सिद्धांत नाम स्थान के सामने बैकस्लैश

catch (\Doctrine\ORM\NoResultException $e) 

नोट:

उत्तर

34

अपने कोड namespaced जाता है, तो उसका उपयोग करें।

आपको ऐसा करने की आवश्यकता है क्योंकि PHP के नामस्थान पूर्ण के बजाय सापेक्ष हैं।

यदि आपका कोड My\Namespace पर रखा गया है, और आप Doctrine\ORM\NoResultException को पकड़ने का प्रयास करते हैं, तो वास्तव में यह My\Namespace\Doctrine\ORM\NoResultException पकड़ने का प्रयास करता है।

एक \ के साथ नाम स्थान लगाकर करके आप इसे पूर्ण वर्ग के शीर्ष पर एक

use Exception; 

जोड़ने के लिए (यूनिक्स pathnames के समान)

+0

यह सबसे अधिक संभावना है क्योंकि उपयोगकर्ता Doctrine 2 का उपयोग कर रहा है जो _is_ नेमस्पेड है। – lotsoffreetime

+0

सिद्धांत 2 का उपयोग करने से आप अपने कोड को नाम देने के लिए मजबूर नहीं करते हैं। ऐसे मामले में जहां आपने अपने कोड के लिए नेमस्पेस निर्दिष्ट नहीं किया है, नामस्थान हमेशा रूट पर माना जाता है, इस स्थिति में आपको प्रारंभिक \ –

+0

की आवश्यकता नहीं होगी, साथ ही आप 'NoResultException' को पकड़ सकते हैं और अपने फ़ाइल हेडर में 'उपयोग सिद्धांत \ ORM \ NoResultException;' जोड़ें। –

2

इसकी भी संभव बनाने के लिए और यह अपवाद का समाधान हो जाएगा कक्षा का नाम प्रयास/पकड़ ब्लॉक में प्रयोग किया जाता है।

संबंधित मुद्दे