0 follower

Final Class Yiisoft\Yii\Gii\Validator\TemplateRuleHandler

InheritanceYiisoft\Yii\Gii\Validator\TemplateRuleHandler
ImplementsYiisoft\Validator\RuleHandlerInterface

Method Details

Hide inherited methods

__construct() public method

public __construct( \Yiisoft\Aliases\Aliases $aliases, Yiisoft\Yii\Gii\GiiInterface $gii, Yiisoft\Yii\Gii\ParametersProvider $parametersProvider ): mixed
$aliases \Yiisoft\Aliases\Aliases
$gii Yiisoft\Yii\Gii\GiiInterface
$parametersProvider Yiisoft\Yii\Gii\ParametersProvider

                public function __construct(
    private readonly Aliases $aliases,
    private readonly GiiInterface $gii,
    private readonly ParametersProvider $parametersProvider,
) {
}

            
validate() public method

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 \Yiisoft\Yii\Gii\Validator\requiredTemplates().

public validate( mixed $value, object $rule, \Yiisoft\Validator\ValidationContext $context ): \Yiisoft\Validator\Result
$value mixed
$rule object
$context \Yiisoft\Validator\ValidationContext

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