/** * {@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); } }
/** * 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; }; } }