ProviderMakeCommand.php
TLDR
The ProviderMakeCommand.php
file in the Illuminate\Foundation\Console
namespace is part of the Laravel framework and is responsible for creating a new service provider class. It extends the GeneratorCommand
class and overrides several methods to add custom functionality.
handle
Handles the execution of the console command. Calls the parent handle
method and then adds the generated service provider class to the bootstrap file.
getStub
Gets the stub file for the generator, which is used as a template to generate the service provider class.
resolveStubPath
Resolves the fully-qualified path to the stub file. Checks if a custom path is specified and if not, uses the default stub file provided with the framework.
getDefaultNamespace
Gets the default namespace for the generated class. Appends '\Providers' to the root namespace.
getOptions
Gets the console command arguments. Includes an option to force the creation of the class even if it already exists.
<?php
namespace Illuminate\Foundation\Console;
use Illuminate\Console\GeneratorCommand;
use Illuminate\Support\ServiceProvider;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Input\InputOption;
#[AsCommand(name: 'make:provider')]
class ProviderMakeCommand extends GeneratorCommand
{
/**
* The console command name.
*
* @var string
*/
protected $name = 'make:provider';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Create a new service provider class';
/**
* The type of class being generated.
*
* @var string
*/
protected $type = 'Provider';
/**
* Execute the console command.
*
* @return bool|null
*
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
*/
public function handle()
{
$result = parent::handle();
if ($result === false) {
return $result;
}
ServiceProvider::addProviderToBootstrapFile(
$this->qualifyClass($this->getNameInput()),
$this->laravel->getBootstrapProvidersPath(),
);
return $result;
}
/**
* Get the stub file for the generator.
*
* @return string
*/
protected function getStub()
{
return $this->resolveStubPath('/stubs/provider.stub');
}
/**
* Resolve the fully-qualified path to the stub.
*
* @param string $stub
* @return string
*/
protected function resolveStubPath($stub)
{
return file_exists($customPath = $this->laravel->basePath(trim($stub, '/')))
? $customPath
: __DIR__.$stub;
}
/**
* Get the default namespace for the class.
*
* @param string $rootNamespace
* @return string
*/
protected function getDefaultNamespace($rootNamespace)
{
return $rootNamespace.'\Providers';
}
/**
* Get the console command arguments.
*
* @return array
*/
protected function getOptions()
{
return [
['force', 'f', InputOption::VALUE_NONE, 'Create the class even if the provider already exists'],
];
}
}