Skip to content

Commit

Permalink
Add beforeResolving method
Browse files Browse the repository at this point in the history
  • Loading branch information
lorisleiva committed Nov 15, 2020
1 parent ffb4d0c commit 61b4de9
Showing 1 changed file with 39 additions and 6 deletions.
45 changes: 39 additions & 6 deletions src/Illuminate/Container/Container.php
Expand Up @@ -1050,6 +1050,26 @@ protected function unresolvablePrimitive(ReflectionParameter $parameter)
throw new BindingResolutionException($message);
}

/**
* Register a new before resolving callback for all types.
*
* @param \Closure|string $abstract
* @param \Closure|null $callback
* @return void
*/
public function beforeResolving($abstract, Closure $callback = null)
{
if (is_string($abstract)) {
$abstract = $this->getAlias($abstract);
}

if ($abstract instanceof Closure && is_null($callback)) {
$this->globalBeforeResolvingCallbacks[] = $abstract;
} else {
$this->beforeResolvingCallbacks[$abstract][] = $callback;
}
}

/**
* Register a new resolving callback.
*
Expand Down Expand Up @@ -1097,19 +1117,32 @@ public function afterResolving($abstract, Closure $callback = null)
* @param array $parameters
* @return void
*/
protected function fireBeforeResolvingCallbacks($abstract, $parameters)
protected function fireBeforeResolvingCallbacks($abstract, $parameters = [])
{
foreach ($this->globalBeforeResolvingCallbacks as $callback) {
$callback($abstract, $parameters, $this);
}
$this->fireBeforeCallbackArray($abstract, $parameters, $this->globalBeforeResolvingCallbacks);

foreach ($this->beforeResolvingCallbacks as $type => $callback) {
foreach ($this->beforeResolvingCallbacks as $type => $callbacks) {
if ($type === $abstract || is_subclass_of($abstract, $type)) {
$callback($abstract, $parameters, $this);
$this->fireBeforeCallbackArray($abstract, $parameters, $callbacks);
}
}
}

/**
* Fire an array of callbacks with an object.
*
* @param string $abstract
* @param array $parameters
* @param array $callbacks
* @return void
*/
protected function fireBeforeCallbackArray($abstract, $parameters, array $callbacks)
{
foreach ($callbacks as $callback) {
$callback($abstract, $parameters, $this);
}
}

/**
* Fire all of the resolving callbacks.
*
Expand Down

0 comments on commit 61b4de9

Please sign in to comment.