Trait ModelAwareTrait
Provides functionality for loading table classes and other repositories onto properties of the host object.
Example users of this trait are Cake\Controller\Controller and Cake\Console\Shell.
Property Summary
-
$_modelFactories protected
array<callableCake\Datasource\Locator\LocatorInterface>
A list of overridden model factory functions.
-
$_modelType protected
string
The model type to use.
-
$modelClass protected
string|null
This object's primary model class name. Should be a plural form. CakePHP will not inflect the name.
Method Summary
-
_setModelClass() protected
Set the modelClass property based on conventions.
-
fetchModel() public
Fetch or construct a model instance from a locator.
-
getModelType() public
Get the model type to be used by this class
-
loadModel() public deprecated
Fetch or construct a model and set it to a property on this object.
-
modelFactory() public
Override a existing callable to generate repositories of a given type.
-
setModelType() public
Set the model type to be used by this class
Method Detail
_setModelClass() ¶ protected
_setModelClass(string $name): void
Set the modelClass property based on conventions.
If the property is already set it will not be overwritten
Parameters
-
string
$name Class name.
Returns
void
fetchModel() ¶ public
fetchModel(string|null $modelClass = null, string|null $modelType = null): Cake\Datasource\RepositoryInterface
Fetch or construct a model instance from a locator.
Uses a modelFactory based on $modelType
to fetch and construct a RepositoryInterface
and return it. The default modelType
can be defined with setModelType()
.
Unlike loadModel()
this method will not set an object property.
If a repository provider does not return an object a MissingModelException will be thrown.
Parameters
-
string|null
$modelClass optional Name of model class to load. Defaults to $this->modelClass. The name can be an alias like
'Post'
or FQCN likeApp\Model\Table\PostsTable::class
.-
string|null
$modelType optional The type of repository to load. Defaults to the getModelType() value.
Returns
Cake\Datasource\RepositoryInterface
Throws
Cake\Datasource\Exception\MissingModelException
If the model class cannot be found.
UnexpectedValueException
If $modelClass argument is not provided and ModelAwareTrait::$modelClass property value is empty.
getModelType() ¶ public
getModelType(): string
Get the model type to be used by this class
Returns
string
loadModel() ¶ public
loadModel(string|null $modelClass = null, string|null $modelType = null): Cake\Datasource\RepositoryInterface
Fetch or construct a model and set it to a property on this object.
Uses a modelFactory based on $modelType
to fetch and construct a RepositoryInterface
and set it as a property on the current object. The default modelType
can be defined with setModelType()
.
If a repository provider does not return an object a MissingModelException will be thrown.
Parameters
-
string|null
$modelClass optional Name of model class to load. Defaults to $this->modelClass. The name can be an alias like
'Post'
or FQCN likeApp\Model\Table\PostsTable::class
.-
string|null
$modelType optional The type of repository to load. Defaults to the getModelType() value.
Returns
Cake\Datasource\RepositoryInterface
Throws
Cake\Datasource\Exception\MissingModelException
If the model class cannot be found.
UnexpectedValueException
If $modelClass argument is not provided and ModelAwareTrait::$modelClass property value is empty.
modelFactory() ¶ public
modelFactory(string $type, Cake\Datasource\Locator\LocatorInterface|callable $factory): void
Override a existing callable to generate repositories of a given type.
Parameters
-
string
$type The name of the repository type the factory function is for.
-
Cake\Datasource\Locator\LocatorInterface|callable
$factory The factory function used to create instances.
Returns
void
setModelType() ¶ public
setModelType(string $modelType): $this
Set the model type to be used by this class
Parameters
-
string
$modelType The model type
Returns
$this
Property Detail
$_modelFactories ¶ protected
A list of overridden model factory functions.
Type
array<callableCake\Datasource\Locator\LocatorInterface>
$modelClass ¶ protected
This object's primary model class name. Should be a plural form. CakePHP will not inflect the name.
Example: For an object named 'Comments', the modelClass would be 'Comments'.
Plugin classes should use Plugin.Comments
style names to correctly load
models from the correct plugin.
Use empty string to not use auto-loading on this object. Null auto-detects based on controller name.
Type
string|null