2012-05-03 21 views
21

मेरी सिम्फनी 2 प्रोजेक्ट में मुझे विकास मोड में 404 अपवाद स्क्रीन मिल रही है। लेकिन मुझे उत्पादन मोड में 404 के बजाय HTTP स्टेटस कोड 500 के साथ रिक्त स्क्रीन मिल रही है। मैं app/Resources/TwigBundle/views/Exception में स्थित कस्टम त्रुटि टेम्पलेट का उपयोग कर रहा हूं। अपाचे त्रुटि के लिए लॉग इन यह इस संदेश बनाता है: उत्पादन पर 404 के बजाय सिम्फनी 2 त्रुटि 500 ​​

PHP Fatal error: Uncaught exception 'Symfony\\Component\\Routing\\Exception\\ResourceNotFoundException' in /home/test/app/cache/prod/appprodUrlMatcher.php:518\nStack trace: 
#0 /home/test/app/cache/prod/classes.php(1025): appprodUrlMatcher->match('/404') 
#1 /home/test/app/cache/prod/classes.php(4550): Symfony\\Component\\Routing\\Router->match('/404') 
#2 [internal function]: Symfony\\Bundle\\FrameworkBundle\\EventListener\\RouterListener->onKernelRequest(Object(Symfony\\Component\\HttpKernel\\Event\\GetResponseEvent)) 
#3 /home/test/app/cache/prod/classes.php(3777): call_user_func(Array, Object(Symfony\\Component\\HttpKernel\\Event\\GetResponseEvent)) 
#4 /home/test/app/cache/prod/classes.php(3703): Symfony\\Component\\EventDispatcher\\EventDispatcher->doDispatch(Array, 'kernel.request', Object(Symfony\\Component\\HttpKernel\\Event\\GetResponseEvent)) 
#5 /home/test/app/cache/prod/classes.php(4787): Symfony\\Component\\EventDispatcher\\EventDispatcher->dispatch('kernel.request', Object(Symfony\\Component\\HttpKernel\\Event\\Get in /home/test/app/cache/prod/classes.php on line 4560 
+0

मुझे एक ही समस्या का सामना करना पड़ा है। आपने इसे कैसे हल किया? –

उत्तर

13

Symfony\Component\Routing\Exception\ResourceNotFoundException मतलब है अपरिभाषित मार्ग नाम। ऐसा लगता है कि आपको कहीं भी आपके त्रुटि टेम्पलेट {{ path('wrong_route') }} में मिला है।

+4

मेरे पास कुछ ऐसा ही चल रहा है, लेकिन यह 'is_granted ('IS_AUTHENTICATED_FULLY') 'के कारण होता है - और केवल मेरे 404 पृष्ठ के लिए, मेरा 403 पृष्ठ लोड ठीक है। उस पर कोई अंतर्दृष्टि? [लिंक] (http://stackoverflow.com/questions/11869921/symfony2-is-grantedis- प्रमाणीकृत-fully-during-404-error-page-display-cau) – Nick

+0

@ रूट आपको मिला [उत्तर] https://github.com/symfony/symfony/issues/5225#issuecomment-7626407) लेकिन इसे यहां उल्लेख करना भूल गया :) – coviex

1

एक और विकल्प यह है कि जब कोई टोकन उपलब्ध नहीं है तो आप सुरक्षा संदर्भ में सुरक्षा टोकन तक पहुंचने का प्रयास कर रहे हैं।

4

ResourceNotFoundException राउटर फेंकता है जब कोई मार्ग वर्तमान अनुरोध से मेल नहीं खाता है।

यह कैश समस्या हो सकती है (समय का 80%, यह कैश है। अपने प्री-प्रोडक्शन सर्वर पर rm -rf app/cache/* आज़माएं)। चूंकि समस्या स्थानीय रूप से दिखाई नहीं दे रही है ... (आपने स्थानीय रूप से "prod" env को सही रूप से सही करने की कोशिश की?)।

तुम भी से सब कुछ को दूर करने का प्रयास करना चाहिए अपने app/Resources/TwigBundle/views/Exception/error404.html.twig साधारण HTML को छोड़कर, अगर यह एक टहनी मुद्दा नहीं है की जाँच करने के (कि फ़ाइल नाम आप प्रयोग करते हैं? है)।

+1

Thx बहुत ... एक ही मुद्दे के साथ 1 दिन बिताएं (404 के बजाय 500) और यह ऐप/कैश/था – nolazybits

0

शायद एप्लिकेशन/संसाधन/TwigBundle/विचारों/अपवाद/error.html.twig संदर्भ एक और आधार-लेआउट-टेम्पलेट जो मौजूद नहीं है - इस मेरे मामले में समस्या

1

यहाँ कैसे मैं सभी अनुप्रेषित है था पथ पथ के लिए मौजूद मौजूदा मार्ग। इस मार्ग प्रविष्टि को अपने रूटिंग कॉन्फ़िगरेशन के बहुत नीचे रखें। सभी मौजूदा मार्ग इसके शीर्ष पर होना चाहिए!

anything: 
    path:  /{path} 
    defaults: 
     _controller: FrameworkBundle:Redirect:urlRedirect 
     path:/
     permanent: true 
    requirements: 
     path: ".+" 

संदर्भ:
http://symfony.com/doc/current/cookbook/routing/slash_in_parameter.html
http://symfony.com/doc/current/cookbook/routing/redirect_in_config.html

+0

एसओ के साथ कुछ गलत होना चाहिए। मुझे यह जवाब याद है, लेकिन निश्चित रूप से इस सवाल के लिए नहीं! – ihsan

9

सबसे अधिक संभावना कारण आप उत्पादन (app.php) पर एक 500 त्रुटि/रिक्त पृष्ठ हो रही है, तब भी जब आप एक कस्टम त्रुटि पृष्ठ परिभाषित किया है (उदाहरण के लिए एप्लिकेशन /Resources/TwigBundle/views/Exception/error404.html.twig) है कि आपके त्रुटि टेम्पलेट is_granted टहनी समारोह बुला रहा है, यदि उपयोगकर्ता के प्रवेश की जाँच के बिना है

कदम डिबग करने के लिए:।

1) ऐप/लॉग/prod.log जांचें। क्या आपको इस तरह की त्रुटि दिखाई देती है?

request.ERROR: Exception thrown when handling an exception (Twig_Error_Runtime: An exception has been thrown during the rendering of a template ("The security context contains no authentication token. One possible reason may be that there is no firewall configured for this URL.") 

2) यदि आप ऊपर वर्णित त्रुटि देखते हैं, तो देखें कि क्या आप अपने त्रुटि टेम्पलेट में is_granted का संदर्भ पा सकते हैं। यह जांचें कि उपयोगकर्ता is_granted कॉल करने से पहले लॉग इन है। उदा .:

{% if app.user is not null and is_granted('ROLE_ADMIN') %} 
<p>Text goes here</p> 
{% else %} 

3) आप अपने टेम्पलेट में is_granted के लिए एक संदर्भ नहीं मिल सकता है, वहाँ जो KNP मेनू बंडल द्वारा किया जाता है knp_menu_render के लिए एक कॉल(), अगर देखते हैं।किसी भी विस्तारित टेम्पलेट में भी जांचें। कॉल एक जांच में knp_menu_render को लपेटें की पुष्टि है कि उपयोगकर्ता के प्रवेश:

{% if app.user %} 
    {{ knp_menu_render() }} 
{% endif %} 

अधिक जानकारी के लिए इस पेज के अंत में stof द्वारा टिप्पणी की जाँच करें: https://github.com/symfony/symfony/issues/5320

4

मेरे मामले में यह 404 टेम्पलेट में {% स्टाइलशीट%} टैग का उपयोग किया गया था, जबकि TwigBundle को एसेटिक कॉन्फ़िगरेशन में शामिल नहीं किया गया था।

अपने app/logs/prod.log जांचें, इसका उत्तर होना चाहिए।

0

दिए गए उत्तरों के लिए बस एक पूरक नोट: यदि आप एक मौजूदा टेम्पलेट को शामिल करने का प्रयास कर रहे हैं तो ResourceNotFoundException भी फेंक दिया जा सकता है। एक सामान्य मामला यह है कि आपने अपना एप्लिकेशन कोड दोबारा सुधार लिया है, लेकिन आप app/Resources में स्थित हैं और अपने src/ फ़ोल्डर में नहीं हैं या किसी दिए गए टेम्पलेट सहित किसी दिए गए टेम्पलेट को शामिल नहीं करते हैं जो "त्रुटि" में परिभाषित नहीं है "संदर्भ।

2

मैं एक ही मुद्दा है,

था लेकिन मेरी isGranted php पक्ष में था।

से पहले::

if ($this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY') 

के बाद: तो मैं एक टोकन की जांच जोड़ा

if ($this->get('security.token_storage')->getToken() && $this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY') 
0

मैं encounteres कि Symofny 3 उत्पादन में 500 त्रुटि जब आप का उपयोग नहीं करते फेंकता

$this->createNotFoundException() 
आपके नियंत्रक में

throw Exception('message', 404) 

देव-पर्यावरण पर काम करता है, लेकिन उत्पादन पर नहीं।

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