0 follower

Final Class Yiisoft\Yii\Gii\Generator\ActiveRecord\Generator

InheritanceYiisoft\Yii\Gii\Generator\ActiveRecord\Generator » Yiisoft\Yii\Gii\Generator\AbstractGenerator
ImplementsYiisoft\Yii\Gii\GeneratorInterface

This generator will generate a controller and one or a few action view files.

Protected Methods

Hide inherited methods

Method Description Defined By
render() Generates code using the specified code template and parameters. Yiisoft\Yii\Gii\Generator\AbstractGenerator

Method Details

Hide inherited methods

__construct() public method

public mixed __construct ( \Yiisoft\Aliases\Aliases $aliases, \Yiisoft\Validator\ValidatorInterface $validator, Yiisoft\Yii\Gii\ParametersProvider $parametersProvider, \Yiisoft\Db\Connection\ConnectionInterface $connection )
$aliases \Yiisoft\Aliases\Aliases
$validator \Yiisoft\Validator\ValidatorInterface
$parametersProvider Yiisoft\Yii\Gii\ParametersProvider
$connection \Yiisoft\Db\Connection\ConnectionInterface

                public function __construct(
    Aliases $aliases,
    ValidatorInterface $validator,
    ParametersProvider $parametersProvider,
    private readonly ConnectionInterface $connection,
) {
    parent::__construct($aliases, $validator, $parametersProvider);
}

            
doGenerate() public method

public array doGenerate ( Yiisoft\Yii\Gii\GeneratorCommandInterface $command )
$command Yiisoft\Yii\Gii\GeneratorCommandInterface

                public function doGenerate(GeneratorCommandInterface $command): array
{
    if (!$command instanceof Command) {
        throw new InvalidArgumentException();
    }
    $files = [];
    $rootPath = $this->aliases->get('@root');
    $properties = [];
    if ($schema = $this->connection->getTableSchema($command->getTableName(), true)) {
        foreach ($schema->getColumns() as $columnSchema) {
            $properties[] = new Column(
                name: (string)$columnSchema->getName(),
                type: match ($columnSchema->getPhpType()) {
                    'integer' => 'int',
                    default => 'string',
                },
                isAllowNull: $columnSchema->isAllowNull(),
                defaultValue: $columnSchema->getDefaultValue(),
            );
        }
    }
    $path = $this->getControllerFile($command);
    $codeFile = (new CodeFile(
        $path,
        $this->render($command, 'model.php', ['properties' => $properties])
    ))->withBasePath($rootPath);
    $files[$codeFile->getId()] = $codeFile;
    return $files;
}

            
generate() public method
public Yiisoft\Yii\Gii\Component\CodeFile\CodeFile[] generate ( Yiisoft\Yii\Gii\GeneratorCommandInterface $command )
$command Yiisoft\Yii\Gii\GeneratorCommandInterface
throws Yiisoft\Yii\Gii\Exception\InvalidGeneratorCommandException

                final public function generate(GeneratorCommandInterface $command): array
{
    $result = $this->validator->validate($command);
    if (!$result->isValid()) {
        throw new InvalidGeneratorCommandException($result);
    }
    return $this->doGenerate($command);
}

            
getCommandClass() public static method

public static string getCommandClass ( )

                public static function getCommandClass(): string
{
    return Command::class;
}

            
getDescription() public static method

public static string getDescription ( )

                public static function getDescription(): string
{
    return '';
}

            
getId() public static method

public static string getId ( )

                public static function getId(): string
{
    return 'active-record';
}

            
getName() public static method

public static string getName ( )

                public static function getName(): string
{
    return 'Active Record';
}

            
getRequiredTemplates() public method

public array getRequiredTemplates ( )

                public function getRequiredTemplates(): array
{
    return [
        'model.php',
    ];
}

            
getTemplatePath() public method
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}\"");
}

            
render() protected method

Defined in: Yiisoft\Yii\Gii\Generator\AbstractGenerator::render()

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;
    }
}