*/ protected $instances = []; /** * Contains a list of options that were passed to get() method. * * @var array */ protected $options = []; /** * {@inheritDoc} * * @param string $alias The alias name you want to get. * @param array $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 $options The options you want to build the instance with. * @return \Cake\Datasource\RepositoryInterface */ abstract protected 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 = []; } }