In meinem Standalone (ohne Laravel) Projekt möchte ich Illuminate IoC Container verwenden. Auch möchte ich auf den App-Container durch App
Fassade von illuminate/support
Komponente zur Verfügung gestellt zugreifen. Ich habe beide Komponenten installiert (v5.0.28). Hier ist meine (vereinfacht) Code:So erstellen Sie Illuminate/Support/Fassade/App Fassade für Standalone Illuminate IoC Container
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');
Leider versuchen, etwas zu binden, führt zu:
Fatal error: Call to undefined method Illuminate\Support\Facades\App::bind() in ...\illuminate\support\Facades\Facade.php on line 213
Hier ist der Code auf dieser Linie ist
$instance = static::getFacadeRoot();
...
return $instance->$method($args[0], $args[1]); // <--- line 213
Wo $instance
ist eine Instanz von Illuminate\Support\Facades\App
, $method == 'bind'
, $args[0] == 'w'
und $args[1] == 'Widget'
. Das Problem ist, dass $instance
ist keine Instanz von Illuminate\Container\Container
und Klasse Illuminate\Support\Facades\App
hat keine Unterstützung für den Aufruf beliebiger Funktionen auf seine statische Eigenschaft $app
.
Um es i funktioniert hinzugefügt, um die folgende Funktion Illuminate\Support\Facades\App
:
public function __call($method , array $arguments) {
return call_user_func_array(array(static::$app, $method), $arguments);
}
Aber sicher externe Komponente Bearbeitung ist nicht das Richtige zu tun !!! Sicherlich ist jemand schon einmal darauf gestoßen!
Die Frage ist also: Was ist der richtige Weg, dies zu tun?