123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301 |
- <?php
-
- namespace Illuminate\Support;
-
- use Illuminate\Console\Application as Artisan;
-
- abstract class ServiceProvider
- {
- /**
- * The application instance.
- *
- * @var \Illuminate\Contracts\Foundation\Application
- */
- protected $app;
-
- /**
- * Indicates if loading of the provider is deferred.
- *
- * @var bool
- */
- protected $defer = false;
-
- /**
- * The paths that should be published.
- *
- * @var array
- */
- public static $publishes = [];
-
- /**
- * The paths that should be published by group.
- *
- * @var array
- */
- public static $publishGroups = [];
-
- /**
- * Create a new service provider instance.
- *
- * @param \Illuminate\Contracts\Foundation\Application $app
- * @return void
- */
- public function __construct($app)
- {
- $this->app = $app;
- }
-
- /**
- * Merge the given configuration with the existing configuration.
- *
- * @param string $path
- * @param string $key
- * @return void
- */
- protected function mergeConfigFrom($path, $key)
- {
- $config = $this->app['config']->get($key, []);
-
- $this->app['config']->set($key, array_merge(require $path, $config));
- }
-
- /**
- * Load the given routes file if routes are not already cached.
- *
- * @param string $path
- * @return void
- */
- protected function loadRoutesFrom($path)
- {
- if (! $this->app->routesAreCached()) {
- require $path;
- }
- }
-
- /**
- * Register a view file namespace.
- *
- * @param string $path
- * @param string $namespace
- * @return void
- */
- protected function loadViewsFrom($path, $namespace)
- {
- if (is_array($this->app->config['view']['paths'])) {
- foreach ($this->app->config['view']['paths'] as $viewPath) {
- if (is_dir($appPath = $viewPath.'/vendor/'.$namespace)) {
- $this->app['view']->addNamespace($namespace, $appPath);
- }
- }
- }
-
- $this->app['view']->addNamespace($namespace, $path);
- }
-
- /**
- * Register a translation file namespace.
- *
- * @param string $path
- * @param string $namespace
- * @return void
- */
- protected function loadTranslationsFrom($path, $namespace)
- {
- $this->app['translator']->addNamespace($namespace, $path);
- }
-
- /**
- * Register a JSON translation file path.
- *
- * @param string $path
- * @return void
- */
- protected function loadJsonTranslationsFrom($path)
- {
- $this->app['translator']->addJsonPath($path);
- }
-
- /**
- * Register a database migration path.
- *
- * @param array|string $paths
- * @return void
- */
- protected function loadMigrationsFrom($paths)
- {
- $this->app->afterResolving('migrator', function ($migrator) use ($paths) {
- foreach ((array) $paths as $path) {
- $migrator->path($path);
- }
- });
- }
-
- /**
- * Register paths to be published by the publish command.
- *
- * @param array $paths
- * @param string $group
- * @return void
- */
- protected function publishes(array $paths, $group = null)
- {
- $this->ensurePublishArrayInitialized($class = static::class);
-
- static::$publishes[$class] = array_merge(static::$publishes[$class], $paths);
-
- if ($group) {
- $this->addPublishGroup($group, $paths);
- }
- }
-
- /**
- * Ensure the publish array for the service provider is initialized.
- *
- * @param string $class
- * @return void
- */
- protected function ensurePublishArrayInitialized($class)
- {
- if (! array_key_exists($class, static::$publishes)) {
- static::$publishes[$class] = [];
- }
- }
-
- /**
- * Add a publish group / tag to the service provider.
- *
- * @param string $group
- * @param array $paths
- * @return void
- */
- protected function addPublishGroup($group, $paths)
- {
- if (! array_key_exists($group, static::$publishGroups)) {
- static::$publishGroups[$group] = [];
- }
-
- static::$publishGroups[$group] = array_merge(
- static::$publishGroups[$group], $paths
- );
- }
-
- /**
- * Get the paths to publish.
- *
- * @param string $provider
- * @param string $group
- * @return array
- */
- public static function pathsToPublish($provider = null, $group = null)
- {
- if (! is_null($paths = static::pathsForProviderOrGroup($provider, $group))) {
- return $paths;
- }
-
- return collect(static::$publishes)->reduce(function ($paths, $p) {
- return array_merge($paths, $p);
- }, []);
- }
-
- /**
- * Get the paths for the provider or group (or both).
- *
- * @param string|null $provider
- * @param string|null $group
- * @return array
- */
- protected static function pathsForProviderOrGroup($provider, $group)
- {
- if ($provider && $group) {
- return static::pathsForProviderAndGroup($provider, $group);
- } elseif ($group && array_key_exists($group, static::$publishGroups)) {
- return static::$publishGroups[$group];
- } elseif ($provider && array_key_exists($provider, static::$publishes)) {
- return static::$publishes[$provider];
- } elseif ($group || $provider) {
- return [];
- }
- }
-
- /**
- * Get the paths for the provider and group.
- *
- * @param string $provider
- * @param string $group
- * @return array
- */
- protected static function pathsForProviderAndGroup($provider, $group)
- {
- if (! empty(static::$publishes[$provider]) && ! empty(static::$publishGroups[$group])) {
- return array_intersect_key(static::$publishes[$provider], static::$publishGroups[$group]);
- }
-
- return [];
- }
-
- /**
- * Get the service providers available for publishing.
- *
- * @return array
- */
- public static function publishableProviders()
- {
- return array_keys(static::$publishes);
- }
-
- /**
- * Get the groups available for publishing.
- *
- * @return array
- */
- public static function publishableGroups()
- {
- return array_keys(static::$publishGroups);
- }
-
- /**
- * Register the package's custom Artisan commands.
- *
- * @param array|mixed $commands
- * @return void
- */
- public function commands($commands)
- {
- $commands = is_array($commands) ? $commands : func_get_args();
-
- Artisan::starting(function ($artisan) use ($commands) {
- $artisan->resolveCommands($commands);
- });
- }
-
- /**
- * Get the services provided by the provider.
- *
- * @return array
- */
- public function provides()
- {
- return [];
- }
-
- /**
- * Get the events that trigger this service provider to register.
- *
- * @return array
- */
- public function when()
- {
- return [];
- }
-
- /**
- * Determine if the provider is deferred.
- *
- * @return bool
- */
- public function isDeferred()
- {
- return $this->defer;
- }
- }
|