rector/vendor/illuminate/container/ContextualBindingBuilder.php
Tomas Votruba 9e103260ec Updated Rector to commit 2f3e9be0ae108c75f9de8fbf2ea92f0393ad9839
2f3e9be0ae [DX] Test BetterNodeFinder with Laravel container (#4106)
2023-06-08 14:23:03 +00:00

89 lines
2.4 KiB
PHP

<?php
namespace RectorPrefix202306\Illuminate\Container;
use RectorPrefix202306\Illuminate\Contracts\Container\Container;
use RectorPrefix202306\Illuminate\Contracts\Container\ContextualBindingBuilder as ContextualBindingBuilderContract;
class ContextualBindingBuilder implements ContextualBindingBuilderContract
{
/**
* The underlying container instance.
*
* @var \Illuminate\Contracts\Container\Container
*/
protected $container;
/**
* The concrete instance.
*
* @var string|array
*/
protected $concrete;
/**
* The abstract target.
*
* @var string
*/
protected $needs;
/**
* Create a new contextual binding builder.
*
* @param \Illuminate\Contracts\Container\Container $container
* @param string|array $concrete
* @return void
*/
public function __construct(Container $container, $concrete)
{
$this->concrete = $concrete;
$this->container = $container;
}
/**
* Define the abstract target that depends on the context.
*
* @param string $abstract
* @return $this
*/
public function needs($abstract)
{
$this->needs = $abstract;
return $this;
}
/**
* Define the implementation for the contextual binding.
*
* @param \Closure|string|array $implementation
* @return void
*/
public function give($implementation)
{
foreach (Util::arrayWrap($this->concrete) as $concrete) {
$this->container->addContextualBinding($concrete, $this->needs, $implementation);
}
}
/**
* Define tagged services to be used as the implementation for the contextual binding.
*
* @param string $tag
* @return void
*/
public function giveTagged($tag)
{
$this->give(function ($container) use($tag) {
$taggedServices = $container->tagged($tag);
return \is_array($taggedServices) ? $taggedServices : \iterator_to_array($taggedServices);
});
}
/**
* Specify the configuration item to bind as a primitive.
*
* @param string $key
* @param mixed $default
* @return void
*/
public function giveConfig($key, $default = null)
{
$this->give(function ($container) use($key, $default) {
return $container->get('config')->get($key, $default);
});
}
}