Files
pull-courseware/vendor/kevinrob/guzzle-cache-middleware/src/Strategy/Delegate/DelegatingCacheStrategy.php
T
julecn 9bab04be20 chore: 批量修改文件权限为可执行
将项目内绝大多数文件的权限从644调整为755,统一可执行权限配置
2026-08-02 16:29:01 +08:00

102 lines
2.6 KiB
PHP
Executable File

<?php
namespace Kevinrob\GuzzleCache\Strategy\Delegate;
use Kevinrob\GuzzleCache\Strategy\CacheStrategyInterface;
use Kevinrob\GuzzleCache\Strategy\NullCacheStrategy;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
class DelegatingCacheStrategy implements CacheStrategyInterface
{
/**
* @var array
*/
private $requestMatchers = [];
/**
* @var CacheStrategyInterface
*/
private $defaultCacheStrategy;
/**
* DelegatingCacheStrategy constructor.
*/
public function __construct(CacheStrategyInterface $defaultCacheStrategy = null)
{
$this->defaultCacheStrategy = $defaultCacheStrategy ?: new NullCacheStrategy();
}
/**
* @param CacheStrategyInterface $defaultCacheStrategy
*/
public function setDefaultCacheStrategy(CacheStrategyInterface $defaultCacheStrategy)
{
$this->defaultCacheStrategy = $defaultCacheStrategy;
}
/**
* @param RequestMatcherInterface $requestMatcher
* @param CacheStrategyInterface $cacheStrategy
*/
final public function registerRequestMatcher(RequestMatcherInterface $requestMatcher, CacheStrategyInterface $cacheStrategy)
{
$this->requestMatchers[] = [
$requestMatcher,
$cacheStrategy,
];
}
/**
* @param RequestInterface $request
* @return CacheStrategyInterface
*/
private function getStrategyFor(RequestInterface $request)
{
/**
* @var RequestMatcherInterface $requestMatcher
* @var CacheStrategyInterface $cacheStrategy
*/
foreach ($this->requestMatchers as $requestMatcher) {
list($requestMatcher, $cacheStrategy) = $requestMatcher;
if ($requestMatcher->matches($request)) {
return $cacheStrategy;
}
}
return $this->defaultCacheStrategy;
}
/**
* @inheritDoc
*/
public function fetch(RequestInterface $request)
{
return $this->getStrategyFor($request)->fetch($request);
}
/**
* @inheritDoc
*/
public function cache(RequestInterface $request, ResponseInterface $response)
{
return $this->getStrategyFor($request)->cache($request, $response);
}
/**
* @inheritDoc
*/
public function update(RequestInterface $request, ResponseInterface $response)
{
return $this->getStrategyFor($request)->update($request, $response);
}
/**
* {@inheritdoc}
*/
public function delete(RequestInterface $request)
{
return $this->getStrategyFor($request)->delete($request);
}
}