Final Class Yiisoft\Yii\Gii\Generator\ActiveRecord\Generator
| Inheritance | Yiisoft\Yii\Gii\Generator\ActiveRecord\Generator » Yiisoft\Yii\Gii\Generator\AbstractGenerator |
|---|---|
| Implements | Yiisoft\Yii\Gii\GeneratorInterface |
This generator will generate a controller and one or a few action view files.
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
Protected Methods
| Method | Description | Defined By |
|---|---|---|
| render() | Generates code using the specified code template and parameters. | Yiisoft\Yii\Gii\Generator\AbstractGenerator |
Method Details
| 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);
}
| 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;
}
final public function generate(GeneratorCommandInterface $command): array
{
$result = $this->validator->validate($command);
if (!$result->isValid()) {
throw new InvalidGeneratorCommandException($result);
}
return $this->doGenerate($command);
}
| public static string getCommandClass ( ) |
public static function getCommandClass(): string
{
return Command::class;
}
| public static string getDescription ( ) |
public static function getDescription(): string
{
return '';
}
| public static string getName ( ) |
public static function getName(): string
{
return 'Active Record';
}
| public array getRequiredTemplates ( ) |
public function getRequiredTemplates(): array
{
return [
'model.php',
];
}
| 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}\"");
}
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;
}
}
Signup or Login in order to comment.