RuleMakeCommand.php
TLDR
This file contains the RuleMakeCommand
class, which is responsible for creating a new validation rule in the Laravel application.
buildClass($name)
This method is used to build the class with the given name. It replaces the {{ ruleType }}
placeholder in the generated class with either 'ImplicitRule' or 'Rule', depending on the value of the 'implicit' option.
getStub()
This method returns the stub file path for the generator. The stub file is used as a template for generating the rule class.
getDefaultNamespace($rootNamespace)
This method returns the default namespace for the rule class.
getOptions()
This method returns an array of console command options that can be used with the make:rule
command.
<?php
namespace Illuminate\Foundation\Console;
use Illuminate\Console\GeneratorCommand;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Input\InputOption;
#[AsCommand(name: 'make:rule')]
class RuleMakeCommand extends GeneratorCommand
{
/**
* The console command name.
*
* @var string
*/
protected $name = 'make:rule';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Create a new validation rule';
/**
* The type of class being generated.
*
* @var string
*/
protected $type = 'Rule';
/**
* Build the class with the given name.
*
* @param string $name
* @return string
*
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
*/
protected function buildClass($name)
{
return str_replace(
'{{ ruleType }}',
$this->option('implicit') ? 'ImplicitRule' : 'Rule',
parent::buildClass($name)
);
}
/**
* Get the stub file for the generator.
*
* @return string
*/
protected function getStub()
{
$stub = $this->option('implicit')
? '/stubs/rule.implicit.stub'
: '/stubs/rule.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.'\Rules';
}
/**
* Get the console command options.
*
* @return array
*/
protected function getOptions()
{
return [
['force', 'f', InputOption::VALUE_NONE, 'Create the class even if the rule already exists'],
['implicit', 'i', InputOption::VALUE_NONE, 'Generate an implicit rule'],
];
}
}