<?php
/*
* This file is part of the Doctrine Behavioral Extensions package.
* (c) Gediminas Morkevicius <gediminas.morkevicius@gmail.com> http://www.gediminasm.org
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Gedmo\Mapping\Driver;
use Gedmo\Mapping\Driver;
/**
* The chain mapping driver enables chained
* extension mapping driver support
*
* @author Gediminas Morkevicius <gediminas.morkevicius@gmail.com>
*
* @final since gedmo/doctrine-extensions 3.11
*/
class Chain implements Driver
{
/**
* The default driver
*
* @var Driver|null
*/
private $defaultDriver;
/**
* List of drivers nested
*
* @var Driver[]
*/
private $_drivers = [];
/**
* Add a nested driver.
*
* @param string $namespace
*
* @return void
*/
public function addDriver(Driver $nestedDriver, $namespace)
{
$this->_drivers[$namespace] = $nestedDriver;
}
/**
* Get the array of nested drivers.
*
* @return Driver[] $drivers
*/
public function getDrivers()
{
return $this->_drivers;
}
/**
* Get the default driver.
*
* @return Driver|null
*/
public function getDefaultDriver()
{
return $this->defaultDriver;
}
/**
* Set the default driver.
*
* @return void
*/
public function setDefaultDriver(Driver $driver)
{
$this->defaultDriver = $driver;
}
public function readExtendedMetadata($meta, array &$config)
{
foreach ($this->_drivers as $namespace => $driver) {
if (0 === strpos($meta->getName(), $namespace)) {
$driver->readExtendedMetadata($meta, $config);
return;
}
}
if (null !== $this->defaultDriver) {
$this->defaultDriver->readExtendedMetadata($meta, $config);
return;
}
// commenting it for customized mapping support, debugging of such cases might get harder
// throw new \Gedmo\Exception\UnexpectedValueException('Class ' . $meta->getName() . ' is not a valid entity or mapped super class.');
}
/**
* Passes in the mapping read by original driver
*/
public function setOriginalDriver($driver)
{
// not needed here
}
}