modelClass)) { $this->modelClass = $name; } } /** * Loads and constructs repository objects required by this object * * Typically used to load ORM Table objects as required. Can * also be used to load other types of repository objects your application uses. * * If a repository provider does not return an object a MissingModelException will * be thrown. * * @param string|null $modelClass Name of model class to load. Defaults to $this->modelClass * @param string|null $modelType The type of repository to load. Defaults to the modelType() value. * @return \Cake\Datasource\RepositoryInterface The model instance created. * @throws \Cake\Datasource\Exception\MissingModelException If the model class cannot be found. * @throws \InvalidArgumentException When using a type that has not been registered. * @throws \UnexpectedValueException If no model type has been defined */ public function loadModel($modelClass = null, $modelType = null) { if ($modelClass === null) { $modelClass = $this->modelClass; } if ($modelType === null) { $modelType = $this->getModelType(); if ($modelType === null) { throw new UnexpectedValueException('No model type has been defined'); } } list(, $alias) = pluginSplit($modelClass, true); if (isset($this->{$alias})) { return $this->{$alias}; } if (isset($this->_modelFactories[$modelType])) { $factory = $this->_modelFactories[$modelType]; } if (!isset($factory)) { $factory = FactoryLocator::get($modelType); } $this->{$alias} = $factory($modelClass); if (!$this->{$alias}) { throw new MissingModelException([$modelClass, $modelType]); } return $this->{$alias}; } /** * Override a existing callable to generate repositories of a given type. * * @param string $type The name of the repository type the factory function is for. * @param callable $factory The factory function used to create instances. * @return void */ public function modelFactory($type, callable $factory) { $this->_modelFactories[$type] = $factory; } /** * Get the model type to be used by this class * * @return string */ public function getModelType() { return $this->_modelType; } /** * Set the model type to be used by this class * * @param string $modelType The model type * * @return $this */ public function setModelType($modelType) { $this->_modelType = $modelType; return $this; } /** * Set or get the model type to be used by this class * * @deprecated 3.5.0 Use getModelType()/setModelType() instead. * @param string|null $modelType The model type or null to retrieve the current * * @return string|$this */ public function modelType($modelType = null) { deprecationWarning( get_called_class() . '::modelType() is deprecated. ' . 'Use setModelType()/getModelType() instead.' ); if ($modelType === null) { return $this->_modelType; } $this->_modelType = $modelType; return $this; } }