Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
50.00% |
1 / 2 |
CRAP | |
91.67% |
11 / 12 |
ChainRequestPolicy | |
0.00% |
0 / 1 |
|
50.00% |
1 / 2 |
6.02 | |
91.67% |
11 / 12 |
check | |
0.00% |
0 / 1 |
5.03 | |
90.00% |
9 / 10 |
|||
addPolicy | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\Core\PageCache\ChainRequestPolicy. | |
*/ | |
namespace Drupal\Core\PageCache; | |
use Symfony\Component\HttpFoundation\Request; | |
/** | |
* Implements a compound request policy. | |
* | |
* When evaluating the compound policy, all of the contained rules are applied | |
* to the request. The overall result is computed according to the following | |
* rules: | |
* | |
* <ol> | |
* <li>Returns static::DENY if any of the rules evaluated to static::DENY</li> | |
* <li>Returns static::ALLOW if at least one of the rules evaluated to | |
* static::ALLOW and none to static::DENY</li> | |
* <li>Otherwise returns NULL</li> | |
* </ol> | |
*/ | |
class ChainRequestPolicy implements ChainRequestPolicyInterface { | |
/** | |
* A list of policy rules to apply when this policy is evaluated. | |
* | |
* @var \Drupal\Core\PageCache\RequestPolicyInterface[] | |
*/ | |
protected $rules = []; | |
/** | |
* {@inheritdoc} | |
*/ | |
public function check(Request $request) { | |
$final_result = NULL; | |
foreach ($this->rules as $rule) { | |
$result = $rule->check($request); | |
if ($result === static::DENY) { | |
return $result; | |
} | |
elseif ($result === static::ALLOW) { | |
$final_result = $result; | |
} | |
elseif (isset($result)) { | |
throw new \UnexpectedValueException('Return value of RequestPolicyInterface::check() must be one of RequestPolicyInterface::ALLOW, RequestPolicyInterface::DENY or NULL'); | |
} | |
} | |
return $final_result; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function addPolicy(RequestPolicyInterface $policy) { | |
$this->rules[] = $policy; | |
return $this; | |
} | |
} |