5

मेरे स्टैंडअलोन (लार्वेल के बिना) प्रोजेक्ट में मैं इल्यूमिनेट आईओसी कंटेनर का उपयोग करना चाहता हूं। इसके अलावा मैं illuminate/support घटक द्वारा प्रदत्त App मुखौटा के माध्यम से ऐप कंटेनर तक पहुंच बनाना चाहता हूं। मैंने दोनों घटकों को स्थापित किया (v5.0.28)।स्टैंडअलोन रोशनी के लिए रोशनी/समर्थन/फेकाडे/ऐप मुखौटा कैसे बनाएं IoC कंटेनर

function setup_App(){ 
    $container = new Illuminate\Container\Container(); 
    Illuminate\Support\Facades\Facade::setFacadeApplication($container); 
    class_alias('Illuminate\Support\Facades\App', 'App'); 
} 

setup_App(); 

App::bind('w', 'Widget'); 
$widget = App::make('w'); 

दुर्भाग्य से, कुछ बाध्य करने के लिए कोशिश कर परिणाम में: यहाँ मेरी (सरलीकृत) कोड है

Fatal error: Call to undefined method Illuminate\Support\Facades\App::bind() in ...\illuminate\support\Facades\Facade.php on line 213 

यहाँ कि लाइन

$instance = static::getFacadeRoot(); 
... 
return $instance->$method($args[0], $args[1]); // <--- line 213 

कहाँ $instance पर कोड है एक उदाहरण है Illuminate\Support\Facades\App, $method == 'bind', $args[0] == 'w' और $args[1] == 'Widget' का। समस्या यह है कि $instanceIlluminate\Container\Container का उदाहरण नहीं है और वर्ग Illuminate\Support\Facades\App पर इसकी स्थिर संपत्ति $app पर मनमाने ढंग से कार्य करने के लिए कोई समर्थन नहीं है।

यह काम करने के लिए मैं Illuminate\Support\Facades\App के लिए निम्न समारोह कहा:

public function __call($method , array $arguments) { 
    return call_user_func_array(array(static::$app, $method), $arguments); 
} 

लेकिन निश्चित रूप से संपादन बाहरी घटक ऐसा करना सही नहीं है !!! निश्चित रूप से किसी ने इससे पहले सामना किया है!

तो सवाल यह है: ऐसा करने का उचित तरीका क्या है?

उत्तर

1

आप एक प्रमुख घटक गायब हैं। Application कक्षा को कंटेनर से बंधने की आवश्यकता है। फेकाडे कक्षा को 'ऐप' से बंधने की तलाश में है, लेकिन कुछ भी नहीं है, इसलिए आपकी त्रुटि है। आप Illuminate\Container\Container कक्षा को 'ऐप' पर बाध्य करके समस्या को ठीक कर सकते हैं:

function setup_App(){ 
    $container = new Illuminate\Container\Container(); 
    Illuminate\Support\Facades\Facade::setFacadeApplication($container); 
    $container->singleton('app', 'Illuminate\Container\Container'); 
    class_alias('Illuminate\Support\Facades\App', 'App'); 
} 

setup_App(); 

App::bind('w', 'Widget'); 
संबंधित मुद्दे