Stash\Item::validateRecord PHP Method

validateRecord() protected method

This function has the ability to change the isHit property as well as the record passed.
protected validateRecord ( array $validation, &$record )
$validation array
    protected function validateRecord($validation, &$record)
    {
        $invalidation = Invalidation::PRECOMPUTE;
        if (is_array($validation)) {
            $argArray = $validation;
            $invalidation = isset($argArray[0]) ? $argArray[0] : Invalidation::PRECOMPUTE;
            if (isset($argArray[1])) {
                $arg = $argArray[1];
            }
            if (isset($argArray[2])) {
                $arg2 = $argArray[2];
            }
        }
        $curTime = microtime(true);
        if (isset($record['expiration']) && ($ttl = $record['expiration'] - $curTime) > 0) {
            $this->isHit = true;
            if ($invalidation == Invalidation::PRECOMPUTE) {
                $time = isset($arg) && is_numeric($arg) ? $arg : $this->defaults['precompute_time'];
                // If stampede control is on it means another cache is already processing, so we return
                // true for the hit.
                if ($ttl < $time) {
                    $this->isHit = (bool) $this->getStampedeFlag($this->key);
                }
            }
            return;
        }
        if (!isset($invalidation) || $invalidation == Invalidation::NONE) {
            $this->isHit = false;
            return;
        }
        if (!$this->getStampedeFlag($this->key)) {
            $this->isHit = false;
            return;
        }
        switch ($invalidation) {
            case Invalidation::VALUE:
                if (!isset($arg)) {
                    $this->isHit = false;
                    return;
                } else {
                    $record['data']['return'] = $arg;
                    $this->isHit = true;
                }
                break;
            case Invalidation::SLEEP:
                $time = isset($arg) && is_numeric($arg) ? $arg : $this->defaults['sleep_time'];
                $attempts = isset($arg2) && is_numeric($arg2) ? $arg2 : $this->defaults['sleep_attempts'];
                $ptime = $time * 1000;
                if ($attempts <= 0) {
                    $this->isHit = false;
                    $record['data']['return'] = null;
                    break;
                }
                usleep($ptime);
                $record['data']['return'] = $this->executeGet(Invalidation::SLEEP, $time, $attempts - 1);
                break;
            case Invalidation::OLD:
                $this->isHit = isset($record['data']) && $record['data']['return'] !== null;
                break;
            default:
                $this->isHit = false;
                break;
        }
        // switch($invalidate)
    }

Usage Example

Beispiel #1
0
 /**
  * {@inheritdoc}
  */
 protected function validateRecord($validation, &$record)
 {
     $expiration = $_ =& $record['expiration'];
     if (isset($record['data'], $record['data']['return']) && is_array($record['data']['return']) && isset($record['data']['return'][static::DATA_FIELD], $record['data']['return'][static::TAGS_FIELD]) && !empty($record['data']['return'][static::TAGS_FIELD])) {
         $tags = $record['data']['return'][static::TAGS_FIELD];
         foreach ($this->getTagItems(array_keys($record['data']['return'][static::TAGS_FIELD])) as $tag => $tagItem) {
             $tagVersion = $tagItem->get();
             if ($tagVersion !== $tags[$tag]) {
                 unset($record['expiration']);
                 break;
             }
         }
     }
     parent::validateRecord($validation, $record);
     if ($expiration !== null) {
         $record['expiration'] = $expiration;
     }
 }