2013-04-02 9 views
8

यह सवाल following change (Symfony 2.2 रिहाई का हिस्सा) से संबंधित है:Symfony 2.2 विस्तार ExceptionController

भाग 1

पूर्व 2.2 Symfony में, मैं ExceptionController अधिभावी था कुछ कस्टम त्रुटि पृष्ठों को प्रदर्शित करने ।

मैंने किया था के माध्यम से है कि:

parameters: 
     twig.exception_listener.controller: My\CustomBundle\CustomExceptionController::showAction 

अब, 2.2 में अपग्रेड करने के बाद, मैं अब ऐसा कर सकते हैं, क्योंकि एक अपवाद फेंका जाता है, जबकि एक अपवाद पैदा (कोई यमक इरादा):

ExceptionController :: __ निर्माण() Twig_Environment, यह देखते हुए कोई भी, में कहा जाता है का एक उदाहरण होना चाहिए ...

ExceptionController के बाद से एक सेवा है अब, मैं इसे कैसे ओवरराइड कर सकता हूं, और मुझे अपने पुराने कोड में क्या बदलने की ज़रूरत है?

सभी मैं कस्टम कक्षा में था, showAction विधि में टेम्पलेट संदर्भ बदल गई है:

$template = new TemplateReference('TwigBundle', 'Exception', $name, $format, 'twig'); 

भाग 2

के बाद से ExceptionController नहीं रह गया है ContainerAware, फैली हुई है कि कैसे मैं वर्तमान को मिलता है कंटेनर? क्या यह ContainerAwareInterface लागू करने के लिए पर्याप्त है?

उत्तर

12

आप इस के एक जोड़े बदलना चाहिए:

  1. आप करने की जरूरत है अपने कस्टम अपवाद नियंत्रक में ExceptionController वारिस।
  2. आपको twig.controller.exception.class पैरामीटर ओवरराइड करने की आवश्यकता है। जैसा कि आप the service file में देख सकते हैं, यह अपवाद नियंत्रक वर्ग की पहचान करने के लिए twig.controller.exception.class पैरामीटर का उपयोग करता है। अब आप अपने वर्ग के साथ ओवरराइड:

    parameters: 
        twig.controller.exception.class: My\CustomBundle\CustomExceptionController 
    
  3. आप मैं वर्तमान कंटेनर के लिए कैसे मिलता है new signature

    ExceptionController के बाद से नहीं रह गया है ContainerAware फैली showAction के हस्ताक्षर का पालन करने को संपादित करने की जरूरत है,? क्या यह ContainerAwareInterface लागू करने के लिए पर्याप्त है? कंटेनर नहीं कभी नहीं इंजेक्षन

नहीं है, सेवाओं चाहिए। Twig_Environment सेवा के साथ किया गया है, आपको कन्स्ट्रक्टर में आवश्यक सेवाओं को इंजेक्ट करना चाहिए।

अपने अपवाद नियंत्रक के अंदर, आपको जुड़वां सेवा के लिए $this->twig संपत्ति तक पहुंच प्राप्त होती है। और अनुरोध प्राप्त करने के लिए नया हस्ताक्षर $request पैरामीटर प्राप्त करता है। मुझे नहीं लगता कि आपको और चाहिए।(आपको $this->debug भी मिलते हैं)

+0

धन्यवाद वाउटर! क्या मैं याद आ रही थी twig.controller.exception.class ओवरराइड है। अब आकर्षक के रूप में काम करता है। – isyndicate

+1

वास्तव में मेरे सवाल के 2 भाग के लिए, ExceptionController के पिछले कार्यान्वयन में, मैं $ से पैरामीटर को पुनः प्राप्त करने में सक्षम था इस-> container-> getParameter()। मैं कैसे प्राप्त कर सकते हैं कि नए कस्टम अपवाद नियंत्रक में एक ही पैरामीटर, अब है कि यह एक सेवा है? उपयोग कर रहा है $ this-> twig-> getGlobals() सही तरीके से जाने के लिए हो सकता है? – isyndicate

+1

मैं इस ट्यूटोरियल उपयोगी भी पाया: https://knpuniversity.com/screencast/symfony2-ep3/error-pages – shakaran