Files
Chamilo/vendor/gedmo/doctrine-extensions/lib/Gedmo/Mapping/Driver/Chain.php
2025-04-10 12:24:57 +02:00

104 lines
2.2 KiB
PHP

<?php
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>
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
*/
class Chain implements Driver
{
/**
* The default driver
*
* @var Driver|null
*/
private $defaultDriver;
/**
* List of drivers nested
* @var Driver[]
*/
private $_drivers = array();
/**
* Add a nested driver.
*
* @param Driver $nestedDriver
* @param string $namespace
*/
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.
*
* @param Driver $driver
*/
public function setDefaultDriver(Driver $driver)
{
$this->defaultDriver = $driver;
}
/**
* {@inheritDoc}
*/
public function readExtendedMetadata($meta, array &$config)
{
foreach ($this->_drivers as $namespace => $driver) {
if (strpos($meta->name, $namespace) === 0) {
$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->name . ' is not a valid entity or mapped super class.');
}
/**
* Passes in the mapping read by original driver
*
* @param $driver
* @return void
*/
public function setOriginalDriver($driver)
{
//not needed here
}
}