क्या Laravel Doc
कभी कभी में कहा गया है, आप कंटेनर कि केवल एक बार सुलझाया जाना चाहिए में कुछ बाध्य करने के लिए इच्छा हो सकती है, और एक ही उदाहरण कंटेनर में आगामी कॉल पर लौटे किया जाना चाहिए:
इस तरह आप एक singleton
वस्तु बाध्य कर सकते हैं और आप इसे सही
App::singleton('foo', function()
{
return new FooBar;
});
किया है
लेकिन, समस्या यह है कि आप request
और response
की गलत प्रक्रिया में पूरी प्रक्रिया सोच रहे हैं। आपने उल्लेख किया है कि,
मैं देख सकता हूं कि जब भी मैं ब्राउज़र में पृष्ठ रीफ्रेश करता हूं तो ऑब्जेक्ट बनाया जा रहा है।
खैर, यह HTTP
अनुरोध के सामान्य व्यवहार है क्योंकि हर बार जब आप पेज ताज़ा कर रहे हैं हर बार जब आप एक नया अनुरोध और हर बार आवेदन बूट और अनुरोध संसाधित भेज रहे हैं आपके द्वारा भेजे गए और अंत में किया है इसका मतलब है , एक बार जब एप्लिकेशन आपके ब्राउज़र में प्रतिक्रिया भेजता है, तो यह काम समाप्त हो जाता है, सर्वर में कुछ भी नहीं रखा जाता है (सत्र, कुकी लगातार और अलग होती है)।
अब यह कहा गया है कि the same instance should be returned on subsequent calls
, इस मामले में, बाद की कॉल का मतलब है कि, अगर आप उसी अनुरोध पर App::make(...)
पर कई बार आवेदन करते हैं, तो आवेदन के एकल जीवन चक्र में यह नए उदाहरण नहीं देगा हर बार।उदाहरण के लिए, यदि आप दो बार इस
App::before(function($request)
{
App::singleton('myApp', function(){ ... });
});
की तरह कुछ एक ही अनुरोध में कहते हैं, अपने नियंत्रक में, लिए, आपको पहले
class HomeController {
public function showWelcome()
{
App::make('myApp'); // new instance will be returned
// ...
}
}
पर कॉल और फिर आप after
फिल्टर दूसरी बार में इसे कहते
App::after(function($request, $response)
{
App::make('myApp'); // Application will check for an instance and if found, it'll be returned
});
इस मामले में, दोनों कॉल एक ही अनुरोध में हुए और सिंगलटन होने के कारण, कंटेनर पहले कॉल पर केवल एक उदाहरण बना देता है और उदाहरण देता है बाद में उपयोग और प्रत्येक आगामी कॉल पर एक ही उदाहरण देता है।
इस तरह के विस्तृत स्पष्टीकरण के लिए धन्यवाद। मैं जावा दुनिया से आ रहा हूं जहां आईओसी कंटेनर और सिंगलटन का थोड़ा अलग अर्थ है। अब यह मेरे लिए स्पष्ट है। लेकिन उदाहरण के लिए एक पैटर्न क्या है मेरे आवेदन में कई अनुरोधों के लिए डीबी कनेक्शन साझाकरण। जैसे जब मैं MongoDb का उपयोग करता हूं और सर्वर के लिए एक पूल कनेक्शन चाहता हूं जिसे प्रत्येक अनुरोध के लिए एक नया कनेक्शन बनाने के बजाय अनुरोधों के बीच साझा किया जाता है ...? –
आपका स्वागत है :-) बस कोशिश करें [यह] (https://github.com/jenssegers/Laravel-MongoDB)। –
@ वेरवॉल्फ-द एल्फा द्वारा महान स्पष्टीकरण के लिए वोट-अप, बहुत बहुत धन्यवाद – antoniputra