Php 使用Laravel';拉雷维尔外的s集装箱
为什么?Php 使用Laravel';拉雷维尔外的s集装箱,php,laravel,laravel-5,Php,Laravel,Laravel 5,为什么? 我正在尝试使用其他一些Laravel片段,比如独立库中的管道,它需要容器 使用Container tomake()类会上瘾,我需要自动构造函数依赖项处理(假设具体的、类型提示的依赖项) 所以我写了一个助手方法: function container() { if(is_null(Container::getInstance())) { Container::setInstance(new Container()); } return Container::get
make()
类会上瘾,我需要自动构造函数依赖项处理(假设具体的、类型提示的依赖项)function container()
{
if(is_null(Container::getInstance())) {
Container::setInstance(new Container());
}
return Container::getInstance();
}
如果这个库在Laravel中使用,我不想与任何现有的助手方法发生冲突。通过检查现有的静态实例,我认为这将在Laravel内部或外部很好地发挥作用
这很有效!我可以做container()->make(SomeClass::class)
,它将自动构建和注入构造函数依赖项
大部分
如果该类对容器本身有依赖关系(就像管道一样),那么它会:
BindingResolutionException:目标[Illumb\Contracts\Container\Container]不可实例化
当然,好的,管道需要一份合同,但没有连接。因此,让我们更新helper方法来实现这一点:
function container()
{
if(is_null(Container::getInstance())) {
$container = new Container();
$container->bind('Illuminate\Contracts\Container\Container', $container);
Container::setInstance($container);
}
return Container::getInstance();
}
但现在我得到了:
isset中的偏移量类型非法或为空
堆栈跟踪显示Container.php中的一组行号
您知道如何在Laravel之外手动连接容器,这样我就可以
bind()
东西,并使用容器来构建类和处理依赖关系,包括它本身吗?既然您要绑定到现有对象,请使用实例方法:
$container->instance('Illuminate\Contracts\Container\Container', $container);