<?php namespace Illuminate\Support; use Closure; use Illuminate\Contracts\Container\Container; use InvalidArgumentException; abstract class Manager { /** * The container instance. * * @var \Illuminate\Contracts\Container\Container */ protected $container; /** * The configuration repository instance. * * @var \Illuminate\Contracts\Config\Repository */ protected $config; /** * The registered custom driver creators. * * @var array */ protected $customCreators = []; /** * The array of created "drivers". * * @var array */ protected $drivers = []; /** * Create a new manager instance. * * @param \Illuminate\Contracts\Container\Container $container * @return void */ public function __construct(Container $container) { $this->container = $container; $this->config = $container->make('config'); } /** * Get the default driver name. * * @return string */ abstract public function getDefaultDriver(); /** * Get a driver instance. * * @param string|null $driver * @return mixed * * @throws \InvalidArgumentException */ public function driver($driver = null) { $driver = $driver ?: $this->getDefaultDriver(); if (is_null($driver)) { throw new InvalidArgumentException(sprintf( 'Unable to resolve NULL driver for [%s].', static::class )); } // If the given driver has not been created before, we will create the instances // here and cache it so we can return it next time very quickly. If there is // already a driver created by this name, we'll just return that instance. if (! isset($this->drivers[$driver])) { $this->drivers[$driver] = $this->createDriver($driver); } return $this->drivers[$driver]; } /** * Create a new driver instance. * * @param string $driver * @return mixed * * @throws \InvalidArgumentException */ protected function createDriver($driver) { // First, we will determine if a custom driver creator exists for the given driver and // if it does not we will check for a creator method for the driver. Custom creator // callbacks allow developers to build their own "drivers" easily using Closures. if (isset($this->customCreators[$driver])) { return $this->callCustomCreator($driver); } else { $method = 'create'.Str::studly($driver).'Driver'; if (method_exists($this, $method)) { return $this->$method(); } } throw new InvalidArgumentException("Driver [$driver] not supported."); } /** * Call a custom driver creator. * * @param string $driver * @return mixed */ protected function callCustomCreator($driver) { return $this->customCreators[$driver]($this->container); } /** * Register a custom driver creator Closure. * * @param string $driver * @param \Closure $callback * @return $this */ public function extend($driver, Closure $callback) { $this->customCreators[$driver] = $callback; return $this; } /** * Get all of the created "drivers". * * @return array */ public function getDrivers() { return $this->drivers; } /** * Get the container instance used by the manager. * * @return \Illuminate\Contracts\Container\Container */ public function getContainer() { return $this->container; } /** * Set the container instance used by the manager. * * @param \Illuminate\Contracts\Container\Container $container * @return $this */ public function setContainer(Container $container) { $this->container = $container; return $this; } /** * Forget all of the resolved driver instances. * * @return $this */ public function forgetDrivers() { $this->drivers = []; return $this; } /** * Dynamically call the default driver instance. * * @param string $method * @param array $parameters * @return mixed */ public function __call($method, $parameters) { return $this->driver()->$method(...$parameters); } }
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
Exceptions | Folder | 0755 |
|
|
Facades | Folder | 0755 |
|
|
Testing | Folder | 0755 |
|
|
Traits | Folder | 0755 |
|
|
AggregateServiceProvider.php | File | 995 B | 0644 |
|
Benchmark.php | File | 1.49 KB | 0644 |
|
Carbon.php | File | 425 B | 0644 |
|
Composer.php | File | 2.82 KB | 0644 |
|
ConfigurationUrlParser.php | File | 4.25 KB | 0644 |
|
DateFactory.php | File | 7.76 KB | 0644 |
|
Env.php | File | 2.36 KB | 0644 |
|
Fluent.php | File | 4.14 KB | 0644 |
|
HigherOrderTapProxy.php | File | 665 B | 0644 |
|
HtmlString.php | File | 1.03 KB | 0644 |
|
InteractsWithTime.php | File | 1.55 KB | 0644 |
|
Js.php | File | 3.44 KB | 0644 |
|
LICENSE.md | File | 1.05 KB | 0644 |
|
Lottery.php | File | 5.66 KB | 0644 |
|
Manager.php | File | 4.46 KB | 0644 |
|
MessageBag.php | File | 9.8 KB | 0644 |
|
MultipleInstanceManager.php | File | 4.25 KB | 0644 |
|
NamespacedItemResolver.php | File | 3.35 KB | 0644 |
|
Optional.php | File | 2.64 KB | 0644 |
|
Pluralizer.php | File | 2.84 KB | 0644 |
|
ProcessUtils.php | File | 2 KB | 0644 |
|
Reflector.php | File | 4.32 KB | 0644 |
|
ServiceProvider.php | File | 10.76 KB | 0644 |
|
Str.php | File | 36.68 KB | 0644 |
|
Stringable.php | File | 29.75 KB | 0644 |
|
Timebox.php | File | 1.62 KB | 0644 |
|
ValidatedInput.php | File | 4.61 KB | 0644 |
|
ViewErrorBag.php | File | 2.57 KB | 0644 |
|
composer.json | File | 1.74 KB | 0644 |
|
helpers.php | File | 10.08 KB | 0644 |
|