예제 #1
0
 /**
  * {@inheritDoc}
  */
 public function setDriver(DriverInterface $driver, $fallback = true)
 {
     // ping first
     if ($driver->ping()) {
         $this->driver = $driver;
         return;
     }
     // fallback
     if ($fallback) {
         // set to fallback driver
         $this->driver = $driver->getFallback();
         // issue warning
         trigger_error(Message::get(Message::CACHE_FALLBACK_DRIVER, get_class($driver), get_class($this->driver)), E_USER_WARNING);
     } else {
         throw new InvalidArgumentException(Message::get(Message::CACHE_FAIL_DRIVER, get_class($driver)), Message::CACHE_FAIL_DRIVER);
     }
 }
예제 #2
0
 /**
  * Construct with configs/settings
  *
  * @param  DriverInterface $frontDriver
  * @param  DriverInterface $backDriver
  * @param  array $configs object configs
  * @access public
  */
 public function __construct(DriverInterface $frontDriver, DriverInterface $backDriver, array $configs = [])
 {
     // set configs
     parent::__construct($configs);
     // front driver, may use fallback
     if ($frontDriver->ping()) {
         $this->front = $frontDriver;
     } else {
         // set error
         $this->setError($frontDriver->getError(), $frontDriver->getErrorCode());
         $this->front = $frontDriver->getFallback();
     }
     // back driver, may use fallback
     if ($backDriver->ping()) {
         $this->back = $backDriver;
     } else {
         // set error
         $this->setError($backDriver->getError(), $backDriver->getErrorCode());
         $this->back = $backDriver->getFallback();
     }
     // default tester, will write item to both front/back cache
     if (!is_callable($this->tester)) {
         $this->tester = function () {
             return true;
         };
     }
 }