app = $app; $this->events = $events; $this->app->booted(function () { $this->defineConsoleSchedule(); }); } /** * Define the application's command schedule. * * @return void */ protected function defineConsoleSchedule() { $this->app->instance( 'Illuminate\Console\Scheduling\Schedule', $schedule = new Schedule ); $this->schedule($schedule); } /** * Run the console application. * * @param \Symfony\Component\Console\Input\InputInterface $input * @param \Symfony\Component\Console\Output\OutputInterface $output * @return int */ public function handle($input, $output = null) { try { $this->bootstrap(); return $this->getArtisan()->run($input, $output); } catch (Exception $e) { $this->reportException($e); $this->renderException($output, $e); return 1; } catch (Throwable $e) { $e = new FatalThrowableError($e); $this->reportException($e); $this->renderException($output, $e); return 1; } } /** * Terminate the application. * * @param \Symfony\Component\Console\Input\InputInterface $input * @param int $status * @return void */ public function terminate($input, $status) { $this->app->terminate(); } /** * Define the application's command schedule. * * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ protected function schedule(Schedule $schedule) { // } /** * Run an Artisan console command by name. * * @param string $command * @param array $parameters * @return int */ public function call($command, array $parameters = []) { $this->bootstrap(); return $this->getArtisan()->call($command, $parameters); } /** * Queue the given console command. * * @param string $command * @param array $parameters * @return void */ public function queue($command, array $parameters = []) { $this->app['Illuminate\Contracts\Queue\Queue']->push( 'Illuminate\Foundation\Console\QueuedJob', func_get_args() ); } /** * Get all of the commands registered with the console. * * @return array */ public function all() { $this->bootstrap(); return $this->getArtisan()->all(); } /** * Get the output for the last run command. * * @return string */ public function output() { $this->bootstrap(); return $this->getArtisan()->output(); } /** * Bootstrap the application for artisan commands. * * @return void */ public function bootstrap() { if (! $this->app->hasBeenBootstrapped()) { $this->app->bootstrapWith($this->bootstrappers()); } // If we are calling an arbitrary command from within the application, we'll load // all of the available deferred providers which will make all of the commands // available to an application. Otherwise the command will not be available. $this->app->loadDeferredProviders(); } /** * Get the Artisan application instance. * * @return \Illuminate\Console\Application */ protected function getArtisan() { if (is_null($this->artisan)) { return $this->artisan = (new Artisan($this->app, $this->events, $this->app->version())) ->resolveCommands($this->commands); } return $this->artisan; } /** * Get the bootstrap classes for the application. * * @return array */ protected function bootstrappers() { return $this->bootstrappers; } /** * Report the exception to the exception handler. * * @param \Exception $e * @return void */ protected function reportException(Exception $e) { $this->app['Illuminate\Contracts\Debug\ExceptionHandler']->report($e); } /** * Report the exception to the exception handler. * * @param \Symfony\Component\Console\Output\OutputInterface $output * @param \Exception $e * @return void */ protected function renderException($output, Exception $e) { $this->app['Illuminate\Contracts\Debug\ExceptionHandler']->renderForConsole($output, $e); } }