Abstract Class Yiisoft\Yii\Gii\Generator\AbstractGenerator
This is the base class for all generator classes.
A generator instance is responsible for taking user inputs, validating them, and using them to generate the corresponding code based on a set of code template files.
A generator class typically needs to implement the following methods:
- {@see \Yiisoft\Yii\Gii\GeneratorInterface::getName()}: returns the name of the generator
- {@see \Yiisoft\Yii\Gii\GeneratorInterface::getDescription()}: returns the detailed description of the generator
- {@see \Yiisoft\Yii\Gii\GeneratorInterface::generate()}: generates the code based on the current user input and the specified code template files. This is the place where main code generation code resides.
Protected Properties
| Property | Type | Description | Defined By |
|---|---|---|---|
| $aliases | \Yiisoft\Aliases\Aliases | Yiisoft\Yii\Gii\Generator\AbstractGenerator | |
| $parametersProvider | Yiisoft\Yii\Gii\ParametersProvider | Yiisoft\Yii\Gii\Generator\AbstractGenerator | |
| $validator | \Yiisoft\Validator\ValidatorInterface | Yiisoft\Yii\Gii\Generator\AbstractGenerator |
Public Methods
| Method | Description | Defined By |
|---|---|---|
| __construct() | Yiisoft\Yii\Gii\Generator\AbstractGenerator | |
| generate() | Yiisoft\Yii\Gii\Generator\AbstractGenerator | |
| getCommandClass() | Yiisoft\Yii\Gii\GeneratorInterface | |
| getDescription() | Returns the detailed description of the generator | Yiisoft\Yii\Gii\GeneratorInterface |
| getId() | Returns the id of the generator | Yiisoft\Yii\Gii\GeneratorInterface |
| getName() | Returns the name of the generator | Yiisoft\Yii\Gii\GeneratorInterface |
| getRequiredTemplates() | Yiisoft\Yii\Gii\Generator\AbstractGenerator | |
| getTemplatePath() | Yiisoft\Yii\Gii\Generator\AbstractGenerator |
Protected Methods
| Method | Description | Defined By |
|---|---|---|
| doGenerate() | Yiisoft\Yii\Gii\Generator\AbstractGenerator | |
| render() | Generates code using the specified code template and parameters. | Yiisoft\Yii\Gii\Generator\AbstractGenerator |
Property Details
Method Details
| public mixed __construct ( \Yiisoft\Aliases\Aliases $aliases, \Yiisoft\Validator\ValidatorInterface $validator, Yiisoft\Yii\Gii\ParametersProvider $parametersProvider ) | ||
| $aliases | \Yiisoft\Aliases\Aliases | |
| $validator | \Yiisoft\Validator\ValidatorInterface | |
| $parametersProvider | Yiisoft\Yii\Gii\ParametersProvider | |
public function __construct(
protected Aliases $aliases,
protected ValidatorInterface $validator,
protected ParametersProvider $parametersProvider,
) {
}
| protected abstract array doGenerate ( Yiisoft\Yii\Gii\GeneratorCommandInterface $command ) | ||
| $command | Yiisoft\Yii\Gii\GeneratorCommandInterface | |
abstract protected function doGenerate(GeneratorCommandInterface $command): array;
final public function generate(GeneratorCommandInterface $command): array
{
$result = $this->validator->validate($command);
if (!$result->isValid()) {
throw new InvalidGeneratorCommandException($result);
}
return $this->doGenerate($command);
}
| public abstract static string getCommandClass ( ) |
public static function getCommandClass(): string;
Defined in: Yiisoft\Yii\Gii\GeneratorInterface::getDescription()
Returns the detailed description of the generator
| public abstract static string getDescription ( ) |
public static function getDescription(): string;
Defined in: Yiisoft\Yii\Gii\GeneratorInterface::getId()
Returns the id of the generator
| public abstract static string getId ( ) |
public static function getId(): string;
Defined in: Yiisoft\Yii\Gii\GeneratorInterface::getName()
Returns the name of the generator
| public abstract static string getName ( ) |
public static function getName(): string;
| public string getTemplatePath ( Yiisoft\Yii\Gii\GeneratorCommandInterface $command ) | ||
| $command | Yiisoft\Yii\Gii\GeneratorCommandInterface | |
public function getTemplatePath(GeneratorCommandInterface $command): string
{
$template = $command->getTemplate();
if ($template === 'default') {
return $this->defaultTemplate();
}
$templates = $this->parametersProvider->getTemplates(static::getId());
return $templates[$template] ?? throw new InvalidConfigException("Unknown template: \"{$template}\"");
}
Generates code using the specified code template and parameters.
Note that the code template will be used as a PHP file.
| protected string render ( Yiisoft\Yii\Gii\GeneratorCommandInterface $command, string $templateFile, array $params = [] ) | ||
| $command | Yiisoft\Yii\Gii\GeneratorCommandInterface | |
| $templateFile | string |
The code template file. This must be specified as a file path relative to {@see \Yiisoft\Yii\Gii\Generator\getTemplatePath()}. |
| $params | array |
List of parameters to be passed to the template file. |
| return | string |
The generated code |
|---|---|---|
| throws | Throwable | |
protected function render(GeneratorCommandInterface $command, string $templateFile, array $params = []): string
{
$file = sprintf(
'%s/%s',
$this->aliases->get($this->getTemplatePath($command)),
$templateFile
);
$renderer = function (): void {
/** @psalm-suppress MixedArgument,PossiblyFalseArgument */
extract(func_get_arg(1));
/** @psalm-suppress UnresolvableInclude */
require func_get_arg(0);
};
$obInitialLevel = ob_get_level();
ob_start();
ob_implicit_flush(false);
try {
/** @psalm-suppress PossiblyNullFunctionCall */
$renderer->bindTo($this)($file, array_merge($params, ['command' => $command]));
return (string)ob_get_clean();
} catch (Throwable $e) {
while (ob_get_level() > $obInitialLevel) {
if (!@ob_end_clean()) {
ob_clean();
}
}
throw $e;
}
}
Signup or Login in order to comment.