<?php namespace Illuminate\Foundation\Providers; use Illuminate\Support\ServiceProvider; use Illuminate\Queue\Console\TableCommand; use Illuminate\Auth\Console\MakeAuthCommand; use Illuminate\Foundation\Console\UpCommand; use Illuminate\Foundation\Console\DownCommand; use Illuminate\Auth\Console\ClearResetsCommand; use Illuminate\Foundation\Console\ServeCommand; use Illuminate\Cache\Console\CacheTableCommand; use Illuminate\Queue\Console\FailedTableCommand; use Illuminate\Foundation\Console\TinkerCommand; use Illuminate\Foundation\Console\JobMakeCommand; use Illuminate\Foundation\Console\AppNameCommand; use Illuminate\Foundation\Console\OptimizeCommand; use Illuminate\Foundation\Console\TestMakeCommand; use Illuminate\Foundation\Console\RouteListCommand; use Illuminate\Foundation\Console\EventMakeCommand; use Illuminate\Foundation\Console\ModelMakeCommand; use Illuminate\Foundation\Console\ViewClearCommand; use Illuminate\Session\Console\SessionTableCommand; use Illuminate\Foundation\Console\PolicyMakeCommand; use Illuminate\Foundation\Console\RouteCacheCommand; use Illuminate\Foundation\Console\RouteClearCommand; use Illuminate\Routing\Console\ControllerMakeCommand; use Illuminate\Routing\Console\MiddlewareMakeCommand; use Illuminate\Foundation\Console\ConfigCacheCommand; use Illuminate\Foundation\Console\ConfigClearCommand; use Illuminate\Foundation\Console\ConsoleMakeCommand; use Illuminate\Foundation\Console\EnvironmentCommand; use Illuminate\Foundation\Console\KeyGenerateCommand; use Illuminate\Foundation\Console\RequestMakeCommand; use Illuminate\Foundation\Console\ListenerMakeCommand; use Illuminate\Foundation\Console\ProviderMakeCommand; use Illuminate\Foundation\Console\ClearCompiledCommand; use Illuminate\Foundation\Console\EventGenerateCommand; use Illuminate\Foundation\Console\VendorPublishCommand; use Illuminate\Database\Console\Seeds\SeederMakeCommand; class ArtisanServiceProvider extends ServiceProvider { /** * Indicates if loading of the provider is deferred. * * @var bool */ protected $defer = true; /** * The commands to be registered. * * @var array */ protected $commands = [ 'ClearCompiled' => 'command.clear-compiled', 'ClearResets' => 'command.auth.resets.clear', 'ConfigCache' => 'command.config.cache', 'ConfigClear' => 'command.config.clear', 'Down' => 'command.down', 'Environment' => 'command.environment', 'KeyGenerate' => 'command.key.generate', 'Optimize' => 'command.optimize', 'RouteCache' => 'command.route.cache', 'RouteClear' => 'command.route.clear', 'RouteList' => 'command.route.list', 'Tinker' => 'command.tinker', 'Up' => 'command.up', 'ViewClear' => 'command.view.clear', ]; /** * The commands to be registered. * * @var array */ protected $devCommands = [ 'AppName' => 'command.app.name', 'AuthMake' => 'command.auth.make', 'CacheTable' => 'command.cache.table', 'ConsoleMake' => 'command.console.make', 'ControllerMake' => 'command.controller.make', 'EventGenerate' => 'command.event.generate', 'EventMake' => 'command.event.make', 'JobMake' => 'command.job.make', 'ListenerMake' => 'command.listener.make', 'MiddlewareMake' => 'command.middleware.make', 'ModelMake' => 'command.model.make', 'PolicyMake' => 'command.policy.make', 'ProviderMake' => 'command.provider.make', 'QueueFailedTable' => 'command.queue.failed-table', 'QueueTable' => 'command.queue.table', 'RequestMake' => 'command.request.make', 'SeederMake' => 'command.seeder.make', 'SessionTable' => 'command.session.table', 'Serve' => 'command.serve', 'TestMake' => 'command.test.make', 'VendorPublish' => 'command.vendor.publish', ]; /** * Register the service provider. * * @return void */ public function register() { $this->registerCommands($this->commands); $this->registerCommands($this->devCommands); } /** * Register the given commands. * * @param array $commands * @return void */ protected function registerCommands(array $commands) { foreach (array_keys($commands) as $command) { $method = "register{$command}Command"; call_user_func_array([$this, $method], []); } $this->commands(array_values($commands)); } /** * Register the command. * * @return void */ protected function registerAppNameCommand() { $this->app->singleton('command.app.name', function ($app) { return new AppNameCommand($app['composer'], $app['files']); }); } /** * Register the command. * * @return void */ protected function registerAuthMakeCommand() { $this->app->singleton('command.auth.make', function ($app) { return new MakeAuthCommand; }); } /** * Register the command. * * @return void */ protected function registerCacheTableCommand() { $this->app->singleton('command.cache.table', function ($app) { return new CacheTableCommand($app['files'], $app['composer']); }); } /** * Register the command. * * @return void */ protected function registerClearCompiledCommand() { $this->app->singleton('command.clear-compiled', function () { return new ClearCompiledCommand; }); } /** * Register the command. * * @return void */ protected function registerClearResetsCommand() { $this->app->singleton('command.auth.resets.clear', function () { return new ClearResetsCommand; }); } /** * Register the command. * * @return void */ protected function registerConfigCacheCommand() { $this->app->singleton('command.config.cache', function ($app) { return new ConfigCacheCommand($app['files']); }); } /** * Register the command. * * @return void */ protected function registerConfigClearCommand() { $this->app->singleton('command.config.clear', function ($app) { return new ConfigClearCommand($app['files']); }); } /** * Register the command. * * @return void */ protected function registerConsoleMakeCommand() { $this->app->singleton('command.console.make', function ($app) { return new ConsoleMakeCommand($app['files']); }); } /** * Register the command. * * @return void */ protected function registerControllerMakeCommand() { $this->app->singleton('command.controller.make', function ($app) { return new ControllerMakeCommand($app['files']); }); } /** * Register the command. * * @return void */ protected function registerEventGenerateCommand() { $this->app->singleton('command.event.generate', function () { return new EventGenerateCommand; }); } /** * Register the command. * * @return void */ protected function registerEventMakeCommand() { $this->app->singleton('command.event.make', function ($app) { return new EventMakeCommand($app['files']); }); } /** * Register the command. * * @return void */ protected function registerDownCommand() { $this->app->singleton('command.down', function () { return new DownCommand; }); } /** * Register the command. * * @return void */ protected function registerEnvironmentCommand() { $this->app->singleton('command.environment', function () { return new EnvironmentCommand; }); } /** * Register the command. * * @return void */ protected function registerJobMakeCommand() { $this->app->singleton('command.job.make', function ($app) { return new JobMakeCommand($app['files']); }); } /** * Register the command. * * @return void */ protected function registerKeyGenerateCommand() { $this->app->singleton('command.key.generate', function () { return new KeyGenerateCommand; }); } /** * Register the command. * * @return void */ protected function registerListenerMakeCommand() { $this->app->singleton('command.listener.make', function ($app) { return new ListenerMakeCommand($app['files']); }); } /** * Register the command. * * @return void */ protected function registerMiddlewareMakeCommand() { $this->app->singleton('command.middleware.make', function ($app) { return new MiddlewareMakeCommand($app['files']); }); } /** * Register the command. * * @return void */ protected function registerModelMakeCommand() { $this->app->singleton('command.model.make', function ($app) { return new ModelMakeCommand($app['files']); }); } /** * Register the command. * * @return void */ protected function registerOptimizeCommand() { $this->app->singleton('command.optimize', function ($app) { return new OptimizeCommand($app['composer']); }); } /** * Register the command. * * @return void */ protected function registerProviderMakeCommand() { $this->app->singleton('command.provider.make', function ($app) { return new ProviderMakeCommand($app['files']); }); } /** * Register the command. * * @return void */ protected function registerQueueFailedTableCommand() { $this->app->singleton('command.queue.failed-table', function ($app) { return new FailedTableCommand($app['files'], $app['composer']); }); } /** * Register the command. * * @return void */ protected function registerQueueTableCommand() { $this->app->singleton('command.queue.table', function ($app) { return new TableCommand($app['files'], $app['composer']); }); } /** * Register the command. * * @return void */ protected function registerRequestMakeCommand() { $this->app->singleton('command.request.make', function ($app) { return new RequestMakeCommand($app['files']); }); } /** * Register the command. * * @return void */ protected function registerSeederMakeCommand() { $this->app->singleton('command.seeder.make', function ($app) { return new SeederMakeCommand($app['files'], $app['composer']); }); } /** * Register the command. * * @return void */ protected function registerSessionTableCommand() { $this->app->singleton('command.session.table', function ($app) { return new SessionTableCommand($app['files'], $app['composer']); }); } /** * Register the command. * * @return void */ protected function registerRouteCacheCommand() { $this->app->singleton('command.route.cache', function ($app) { return new RouteCacheCommand($app['files']); }); } /** * Register the command. * * @return void */ protected function registerRouteClearCommand() { $this->app->singleton('command.route.clear', function ($app) { return new RouteClearCommand($app['files']); }); } /** * Register the command. * * @return void */ protected function registerRouteListCommand() { $this->app->singleton('command.route.list', function ($app) { return new RouteListCommand($app['router']); }); } /** * Register the command. * * @return void */ protected function registerServeCommand() { $this->app->singleton('command.serve', function () { return new ServeCommand; }); } /** * Register the command. * * @return void */ protected function registerTestMakeCommand() { $this->app->singleton('command.test.make', function ($app) { return new TestMakeCommand($app['files']); }); } /** * Register the command. * * @return void */ protected function registerTinkerCommand() { $this->app->singleton('command.tinker', function () { return new TinkerCommand; }); } /** * Register the command. * * @return void */ protected function registerUpCommand() { $this->app->singleton('command.up', function () { return new UpCommand; }); } /** * Register the command. * * @return void */ protected function registerVendorPublishCommand() { $this->app->singleton('command.vendor.publish', function ($app) { return new VendorPublishCommand($app['files']); }); } /** * Register the command. * * @return void */ protected function registerViewClearCommand() { $this->app->singleton('command.view.clear', function ($app) { return new ViewClearCommand($app['files']); }); } /** * Register the command. * * @return void */ protected function registerPolicyMakeCommand() { $this->app->singleton('command.policy.make', function ($app) { return new PolicyMakeCommand($app['files']); }); } /** * Get the services provided by the provider. * * @return array */ public function provides() { if ($this->app->environment('production')) { return array_values($this->commands); } else { return array_merge(array_values($this->commands), array_values($this->devCommands)); } } }