for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
/**
* @copyright Copyright (C) eZ Systems AS. All rights reserved.
* @license For full copyright and license information view LICENSE file distributed with this source code.
*/
declare(strict_types=1);
namespace eZ\Publish\Core\MVC\Symfony\SiteAccess\Provider;
use AppendIterator;
use eZ\Publish\Core\MVC\Symfony\SiteAccess;
use eZ\Publish\Core\MVC\Symfony\SiteAccess\SiteAccessProviderInterface;
use Iterator;
use RuntimeException;
final class ChainSiteAccessProvider implements SiteAccessProviderInterface
{
/** @var \eZ\Publish\Core\MVC\Symfony\SiteAccess\SiteAccessProviderInterface[] */
private $providers;
* @param \eZ\Publish\Core\MVC\Symfony\SiteAccess\SiteAccessProviderInterface[] $providers
public function __construct(iterable $providers)
$this->providers = $providers;
}
public function getSiteAccesses(): Iterator
$iterator = new AppendIterator();
foreach($this->providers as $provider) {
$iterator->append($provider->getSiteAccesses());
return $iterator;
public function isDefined(string $name): bool
foreach ($this->providers as $provider) {
if ($provider->isDefined($name)) {
return true;
return false;
public function getSiteAccess(string $name): SiteAccess
return $provider->getSiteAccess($name);
throw new RuntimeException("Undefined siteaccess: $name");