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 mixed __construct ( \Yiisoft\Aliases\Aliases $aliases, Yiisoft\Yii\Gii\GiiInterface $gii, Yiisoft\Yii\Gii\ParametersProvider $parametersProvider )
$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 {@see \Yiisoft\Yii\Gii\Validator\requiredTemplates()}.

public \Yiisoft\Validator\Result validate ( mixed $value, object $rule, \Yiisoft\Validator\ValidationContext $context )
$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;
}