Final Class Yiisoft\Yii\Gii\Validator\TemplateRuleHandler
| Inheritance | Yiisoft\ |
|---|---|
| Implements | Yiisoft\ |
Public Methods
| Method | Description | Defined By |
|---|---|---|
| __construct() | Yiisoft\ |
|
| validate() | Validates the template selection. | Yiisoft\ |
Method Details
| public mixed __construct ( \ | ||
| $aliases | \ |
|
| $gii | Yiisoft\ |
|
| $parametersProvider | Yiisoft\ |
|
public function __construct(
private readonly Aliases $aliases,
private readonly GiiInterface $gii,
private readonly ParametersProvider $parametersProvider,
) {}
Validates the template selection.
This method validates whether the user selects an existing template
and the template contains all required template files as specified in {@see \
| public \ | ||
| $value | mixed | |
| $rule | object | |
| $context | \ |
|
public function validate(mixed $value, object $rule, ValidationContext $context): Result
{
if (!$rule instanceof TemplateRule) {
throw new UnexpectedRuleException(TemplateRule::class, $rule);
}
$result = new Result();
if ($value === 'default') {
return $result;
}
if (!is_string($value)) {
$result->addError(sprintf('Value must be a string, %s given.".', gettype($value)));
return $result;
}
$command = $context->getRawData();
if (!$command instanceof GeneratorCommandInterface) {
throw new RuntimeException(sprintf(
'Unsupported dataset class "%s".',
get_debug_type($command),
));
}
$generator = $this->getGenerator($command);
$templates = $this->parametersProvider->getTemplates($generator::getId());
if ($templates === []) {
return $result;
}
if (!isset($templates[$value])) {
$result->addError(
message: 'Template "{template}" does not exist. Known templates: {templates}',
parameters: [
'template' => $value,
'templates' => implode(', ', array_keys($templates)),
],
);
return $result;
}
$templatePath = $templates[$value];
foreach ($generator->getRequiredTemplates() as $template) {
if (!is_file($this->aliases->get($templatePath . '/' . $template))) {
$result->addError(
message: 'Unable to find the required code template file "{template}".',
parameters: ['template' => $template],
);
}
}
return $result;
}
User Contributed Notes
Leave a comment
Join the conversation to share a note.