D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
usr
/
local
/
psa
/
admin
/
plib
/
modules
/
wp-toolkit
/
vendor
/
cakephp
/
datasource
/
Locator
/
Filename :
AbstractLocator.php
back
Copy
<?php declare (strict_types=1); /** * CakePHP(tm) : Rapid Development Framework (https://cakephp.org) * Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org) * * Licensed under The MIT License * For full copyright and license information, please see the LICENSE.txt * Redistributions of files must retain the above copyright notice. * * @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org) * @link https://cakephp.org CakePHP(tm) Project * @since 4.1.0 * @license https://opensource.org/licenses/mit-license.php MIT License */ namespace WPToolkitDependenciesIsolationPrefix\Cake\Datasource\Locator; use WPToolkitDependenciesIsolationPrefix\Cake\Datasource\RepositoryInterface; use RuntimeException; /** * Provides an abstract registry/factory for repository objects. */ abstract class AbstractLocator implements LocatorInterface { /** * Instances that belong to the registry. * * @var array<string, \Cake\Datasource\RepositoryInterface> */ protected $instances = []; /** * Contains a list of options that were passed to get() method. * * @var array<string, array> */ protected $options = []; /** * {@inheritDoc} * * @param string $alias The alias name you want to get. * @param array<string, mixed> $options The options you want to build the table with. * @return \Cake\Datasource\RepositoryInterface * @throws \RuntimeException When trying to get alias for which instance * has already been created with different options. */ public function get(string $alias, array $options = []) { $storeOptions = $options; unset($storeOptions['allowFallbackClass']); if (isset($this->instances[$alias])) { if (!empty($storeOptions) && isset($this->options[$alias]) && $this->options[$alias] !== $storeOptions) { throw new RuntimeException(\sprintf('You cannot configure "%s", it already exists in the registry.', $alias)); } return $this->instances[$alias]; } $this->options[$alias] = $storeOptions; return $this->instances[$alias] = $this->createInstance($alias, $options); } /** * Create an instance of a given classname. * * @param string $alias Repository alias. * @param array<string, mixed> $options The options you want to build the instance with. * @return \Cake\Datasource\RepositoryInterface */ protected abstract function createInstance(string $alias, array $options); /** * @inheritDoc */ public function set(string $alias, RepositoryInterface $repository) { return $this->instances[$alias] = $repository; } /** * @inheritDoc */ public function exists(string $alias) : bool { return isset($this->instances[$alias]); } /** * @inheritDoc */ public function remove(string $alias) : void { unset($this->instances[$alias], $this->options[$alias]); } /** * @inheritDoc */ public function clear() : void { $this->instances = []; $this->options = []; } }