示例#1
0
 /**
  * @task cache
  */
 protected function requireCacheData($key)
 {
     if (isset($this->usableCacheData[$key])) {
         return $this->usableCacheData[$key];
     }
     $type = PhabricatorUserCacheType::requireCacheTypeForKey($key);
     if (isset($this->rawCacheData[$key])) {
         $raw_value = $this->rawCacheData[$key];
         $usable_value = $type->getValueFromStorage($raw_value);
         $this->usableCacheData[$key] = $usable_value;
         return $usable_value;
     }
     // By default, we throw if a cache isn't available. This is consistent
     // with the standard `needX()` + `attachX()` + `getX()` interaction.
     if (!$this->allowInlineCacheGeneration) {
         throw new PhabricatorDataNotAttachedException($this);
     }
     $usable_value = $type->getDefaultValue();
     $user_phid = $this->getPHID();
     if ($user_phid) {
         $map = $type->newValueForUsers($key, array($this));
         if (array_key_exists($user_phid, $map)) {
             $raw_value = $map[$user_phid];
             $usable_value = $type->getValueFromStorage($raw_value);
             $this->rawCacheData[$key] = $raw_value;
             PhabricatorUserCache::writeCache($type, $key, $user_phid, $raw_value);
         }
     }
     $this->usableCacheData[$key] = $usable_value;
     return $usable_value;
 }