gpt4 book ai didi

php - 如何为独立的 Illuminate IoC 容器创建 Illuminate/Support/Facade/App facade

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:44:16 25 4
gpt4 key购买 nike

在我的独立(没有 Laravel)项目中,我想使用 Illuminate IoC 容器。我还想通过 illuminate/support 组件提供的 App facade 访问应用程序容器。我安装了这两个组件 (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');

不幸的是,尝试绑定(bind)某些东西会导致:

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

其中 $instanceIlluminate\Support\Facades\App 的实例,$method == 'bind' $args[0] == 'w'$args[1] == 'Widget'。问题是 $instance 不是 Illuminate\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);
}

但是编辑外部组件肯定不是正确的做法!!!肯定有人以前遇到过这个!

所以问题是:执行此操作的正确方法是什么?

最佳答案

您缺少一个关键组件。 Application 类需要绑定(bind)到容器。 Facade 正在寻找一个要绑定(bind)到“应用程序”的类,但没有,因此你的错误。您可以通过将 Illuminate\Container\Container 类绑定(bind)到“app”来解决此问题:

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');

关于php - 如何为独立的 Illuminate IoC 容器创建 Illuminate/Support/Facade/App facade,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30053695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com