6

私のスタンドアロン (Laravel なし) プロジェクトでは、Illuminate IoC コンテナーを使用したいと考えています。また、コンポーネントAppによって提供されるファサードを介してアプリ コンテナーにアクセスしたいと考えています。illuminate/support両方のコンポーネント (v5.0.28) をインストールしました。これが私の(簡略化された)コードです:

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\ContainerIlluminate\Support\Facades\App$app

それを機能させるために、次の関数をに追加しましたIlluminate\Support\Facades\App

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

しかし、確かに外部コンポーネントを編集することは正しいことではありません!!! 確かに誰かがこれに遭遇したことがあります!

質問は次のとおりです。これを行う適切な方法は何ですか?

4

1 に答える 1