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 = [];
$relations = [];
$schema = $this->connection->getTableSchema($command->table);
if ($schema !== null) {
foreach ($schema->getColumns() as $columnName => $column) {
$properties[$columnName] = new Property($column);
}
if ($command->generateRelations) {
// Generate outgoing relations (this table's FKs to other tables)
foreach ($schema->getForeignKeys() as $foreignKey) {
$relation = new Relation($foreignKey, $command->getModelName());
$relations[$relation->getName()] = $relation;
}
// Generate inverse relations (other tables' FKs to this table)
$inverseRelations = $this->findInverseRelations($command->table);
foreach ($inverseRelations as $inverseRelation) {
$inverseRelationName = $inverseRelation->getName();
if (isset($relations[$inverseRelationName])) {
continue;
}
$relations[$inverseRelationName] = $inverseRelation;
}
// Mark columns used in relations
foreach ($relations as $relation) {
foreach ($relation->getLink() as $columnName) {
if (isset($properties[$columnName])) {
$properties[$columnName]->usedInRelation = true;
}
}
}
}
}
$path = $this->getModelFile($command);
$codeFile = (new CodeFile(
$path,
$this->render($command, 'model.php', [
'properties' => $properties,
'relations' => $relations,
]),
))->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.