<?php
namespace common\validators;

use InvalidArgumentException;
use Ramsey\Uuid\Uuid;
use yii\validators\Validator;

class UuidValidator extends Validator {

    public $allowNil = true;

    public $skipOnEmpty = false;

    public $message = '{attribute} must be valid uuid';

    public function validateAttribute($model, $attribute) {
        try {
            $uuid = Uuid::fromString($model->$attribute)->toString();
            $model->$attribute = $uuid;
        } catch (InvalidArgumentException $e) {
            $this->addError($model, $attribute, $this->message, []);
        }

        if (isset($uuid) && $this->allowNil === false && $uuid === Uuid::NIL) {
            $this->addError($model, $attribute, $this->message, []);
        }
    }

}