Model

This is a base template object. Equivalent to a Model in ORM.

 class Winter\Storm\Halcyon\Model
extends Winter\Storm\Extension\Extendable
implements 
    Winter\Storm\Halcyon\ModelInterface,
    ArrayAccess,
    Illuminate\Contracts\Support\Arrayable,
    Illuminate\Contracts\Support\Jsonable,
    JsonSerializable

Traits

Trait Description
Emitter

Adds event related features to any class.

ExtendableTrait

This extension trait is used when access to the underlying base class is not available, such as classes that belong to the foundation framework (Laravel). It is currently used by the Controller and Model classes.

Properties

public $attributes : array

The model's attributes, saved to the settings area.

public $exists : bool

Indicates if the model exists.

protected $allowedExtensions : array

Allowable file extensions.

protected $appends : array

The accessors to append to the model's array form.

protected static $booted : array

The array of booted models.

protected static $cache : Illuminate\Cache\CacheManager | null

The cache manager instance.

protected $datasource : string | null

The data source for the model, a directory path.

protected $defaultExtension : string

Default file extension.

protected $dirName : string | null

The container name associated with the model, eg: pages.

protected static $dispatcher : Winter\Storm\Events\Dispatcher | null

The event dispatcher instance.

protected static $eventsBooted : array

The array of models booted events.

protected $fillable : array

The attributes that are mass assignable.

protected $isCompoundObject : bool

Model supports code and settings sections.

protected $loadedFromCache : bool

Indicated whether the object was loaded from the cache.

protected $maxNesting : int

The maximum allowed path nesting level. The default value is 2, meaning that files can only exist in the root directory, or in a subdirectory. Set to null if any level is allowed.

protected static $mutatorCache : array

The cache of the mutated attributes for each class.

protected $observables : array

User exposed observable events.

protected $original : array

The model attribute's original state.

protected $purgeable : array

List of attribute names which are not considered "settings".

protected static $resolver : Winter\Storm\Halcyon\Datasource\ResolverInterface | null

The datasource resolver instance.

protected $wrapCode : bool

Wrap code section in PHP tags.

public $implement : string | array | null

Inherited from Extendable

Extensions implemented by this class.

protected $emitterEventCollection : array

Inherited from Emitter

Collection of registered events.

protected $emitterEventSorted : array

Inherited from Emitter

Sorted collection of events.

protected $emitterSingleEventCollection : array

Inherited from Emitter

Collection of registered events to be fired once only.

protected static $extendableCallbacks : array

Inherited from Extendable

Used to extend the constructor of an extendable class. Eg:

Class::extend(function($obj) { })

protected static $extendableClassLoader : ClassLoader | null

Inherited from Extendable

Class loader instance.

protected static $extendableGuardProperties : bool

Inherited from Extendable

Indicates if dynamic properties can be created.

protected static $extendableStaticMethods : array

Inherited from Extendable

Collection of static methods used by behaviors.

protected $extensionData : array

Inherited from Extendable

Class reflection information, including behaviors.

Methods

public __call (string $method, array $parameters) : mixed

Handle dynamic method calls into the model.

Parameters
Property Description
$method
string
$parameters
array
Returns
mixed

public static __callStatic (string $method, array $parameters) : mixed

Handle dynamic static method calls into the method.

Parameters
Property Description
$method
string
$parameters
array
Returns
mixed

public __construct (array $attributes = [])

Constructor

Parameters
Property Description
$attributes
array
Returns
mixed

public __get (string $key) : mixed

Dynamically retrieve attributes on the model.

Parameters
Property Description
$key
string
Returns
mixed

public __isset (string $key) : bool

Determine if an attribute exists on the model.

Parameters
Property Description
$key
string
Returns
bool

public __set (string $key, mixed $value) : void

Dynamically set attributes on the model.

Parameters
Property Description
$key
string
$value
mixed
Returns
void

public __toString () : string

Convert the model to its string representation.

Returns
string

public __unset (string $key) : void

Unset an attribute on the model.

Parameters
Property Description
$key
string
Returns
void

public addObservableEvents (array | mixed $observables) : void

Add an observable event name.

Parameters
Property Description
$observables
array | mixed
Returns
void

public addPurgeable (array | string | null $attributes = null) : $this

Adds an attribute to the purgeable attributes list

Parameters
Property Description
$attributes
array | string | null
Returns
$this

public static all () : Winter\Storm\Halcyon\Collection

Get all of the models from the datasource.

Returns

public attributesToArray () : array

Convert the model's attributes to an array.

Returns
array

public static cacheMutatedAttributes (string $class) : void

Extract and cache all the mutated attributes of a class.

Parameters
Property Description
$class
string
Returns
void

public static clearBootedModels () : void

Clear the list of booted models so they will be re-booted.

Returns
void

public static create (array $attributes = []) : static

Save a new model and return the instance.

Parameters
Property Description
$attributes
array
Returns
static

public static created (Closure | string $callback, integer $priority) : void

Register a created model event with the dispatcher.

Parameters
Property Description
$callback
Closure | string
$priority
integer
Returns
void

public static creating (Closure | string $callback, integer $priority) : void

Register a creating model event with the dispatcher.

Parameters
Property Description
$callback
Closure | string
$priority
integer
Returns
void

public delete () : bool | null

Delete the model from the database.

Returns
bool | null

public static deleted (Closure | string $callback, integer $priority) : void

Register a deleted model event with the dispatcher.

Parameters
Property Description
$callback
Closure | string
$priority
integer
Returns
void

public static deleting (Closure | string $callback, integer $priority) : void

Register a deleting model event with the dispatcher.

Parameters
Property Description
$callback
Closure | string
$priority
integer
Returns
void

public static fetched (Closure | string $callback) : void

Create a new native event for handling afterFetch().

Parameters
Property Description
$callback
Closure | string
Returns
void

public static fetching (Closure | string $callback) : void

Create a new native event for handling beforeFetch().

Parameters
Property Description
$callback
Closure | string
Returns
void

public fill (array $attributes) : $this

Fill the model with an array of attributes.

Parameters
Property Description
$attributes
array
Returns
$this

public static flushDuplicateCache () : void

Flush the memory cache.

Returns
void

public static flushEventListeners () : void

Remove all of the event listeners for the model.

Returns
void

public getAllowedExtensions () : array

Returns the allowable file extensions supported by this model.

Returns
array

public getAttribute (string $key) : mixed

Get a plain attribute.

Parameters
Property Description
$key
string
Returns
mixed

public getAttributes () : array

Get all of the current attributes on the model.

Returns
array

public getBaseFileNameAttribute () : string

Returns the file name without the extension.

Returns
string

public static getCacheManager () : Illuminate\Cache\CacheManager | null

Get the cache manager instance.

Returns
Illuminate\Cache\CacheManager | null

public getDatasource () : Winter\Storm\Halcyon\Datasource\DatasourceInterface

Get the datasource for the model.

Returns

public getDatasourceName () : string

Get the current datasource name for the model.

Returns
string

public static getDatasourceResolver () : Winter\Storm\Halcyon\Datasource\ResolverInterface

Get the datasource resolver instance.

Returns

public getDirty () : array

Get the attributes that have been changed since last sync.

Returns
array

public static getEventDispatcher () : Winter\Storm\Events\Dispatcher

Get the event dispatcher instance.

Returns

public getFileNameParts ($fileName = null)

Returns the base file name and extension. Applies a default extension, if none found.

Parameters
Property Description
$fileName
mixed
Returns
mixed

public getIdAttribute () : string

Helper for {{ page.id }} or {{ layout.id }} twig vars Returns a semi-unique string for this object.

Returns
string

public getMaxNesting () : int

Returns the maximum directory nesting allowed by this template.

Returns
int

public getMutatedAttributes () : array

Get the mutated attributes for a given instance.

Returns
array

public getObjectTypeDirName () : string

Returns the directory name corresponding to the object type.

For pages the directory name is "pages", for layouts - "layouts", etc.

Returns
string

public getObservableEvents () : array

Get the observable event names.

Returns
array

public getOriginal (string | null $key = null, mixed $default = null) : array

Get the model's original attribute values.

Parameters
Property Description
$key
string | null
$default
mixed
Returns
array

public getSettingsAttribute () : array

The settings is attribute contains everything that should be saved to the settings area.

Returns
array

public getWrapCode () : bool

Returns true if the code section will be wrapped in PHP tags.

Returns
bool

public hasGetMutator (string $key) : bool

Determine if a get mutator exists for an attribute.

Parameters
Property Description
$key
string
Returns
bool

public hasSetMutator (string $key) : bool

Determine if a set mutator exists for an attribute.

Parameters
Property Description
$key
string
Returns
bool

public static hydrate (array $items, string | null $datasource = null) : Winter\Storm\Halcyon\Collection

Create a collection of models from plain arrays.

Parameters
Property Description
$items
array
$datasource
string | null
Returns

public static initCacheItem (mixed $item)

Initializes the object properties from the cached data. The extra data set here becomes available as attributes set on the model after fetch.

Parameters
Property Description
$item
mixed
Returns
mixed

public isCompoundObject () : bool

Returns true if this template supports code and settings sections.

Returns
bool

public isDirty (array | string | null $attributes = null) : bool

Determine if the model or given attribute(s) have been modified.

Parameters
Property Description
$attributes
array | string | null
Returns
bool

public isFillable (string $key) : bool

Determine if the given attribute may be mass assigned.

Parameters
Property Description
$key
string
Returns
bool

public isLoadedFromCache () : bool

Returns true if the object was loaded from the cache.

Returns
bool

public jsonSerialize () : array

Convert the object into something JSON serializable.

Returns
array

public newCollection (array $models = []) : Winter\Storm\Halcyon\Collection

Create a new Halcyon Collection instance.

Parameters
Property Description
$models
array
Returns

public newFromBuilder (array $attributes = [], string | null $datasource = null) : static

Create a new model instance that is existing.

Parameters
Property Description
$attributes
array
$datasource
string | null
Returns
static

public newInstance (array $attributes = [], boolean $exists = false) : static

Create a new instance of the given model.

Parameters
Property Description
$attributes
array
$exists
boolean
Returns
static

public newQuery () : Winter\Storm\Halcyon\Builder

Get a new query builder for the object

Returns

public offsetExists (mixed $offset) : bool

Determine if the given attribute exists.

Parameters
Property Description
$offset
mixed
Returns
bool

public offsetGet (mixed $offset) : mixed

Get the value for a given offset.

Parameters
Property Description
$offset
mixed
Returns
mixed

public offsetSet (mixed $offset, mixed $value) : void

Set the value for a given offset.

Parameters
Property Description
$offset
mixed
$value
mixed
Returns
void

public offsetUnset (mixed $offset) : void

Unset the value for a given offset.

Parameters
Property Description
$offset
mixed
Returns
void

public static on (string | null $datasource = null) : Winter\Storm\Halcyon\Model

Begin querying the model on a given datasource.

Parameters
Property Description
$datasource
string | null
Returns

public static query () : Winter\Storm\Halcyon\Builder

Begin querying the model.

Returns

public removeObservableEvents (array | mixed $observables) : void

Remove an observable event name.

Parameters
Property Description
$observables
array | mixed
Returns
void

public static resolveDatasource (string | null $datasource = null) : Winter\Storm\Halcyon\Datasource\DatasourceInterface

Resolve a datasource instance.

Parameters
Property Description
$datasource
string | null
Returns

public save (array $options = []) : bool

Save the model to the datasource.

Parameters
Property Description
$options
array
Returns
bool

public saveInternal (array $options = []) : bool

Save the model to the database. Is used by {@link save()} and {@link forceSave()}.

Parameters
Property Description
$options
array
Returns
bool

public static saved (Closure | string $callback, integer $priority) : void

Register a saved model event with the dispatcher.

Parameters
Property Description
$callback
Closure | string
$priority
integer
Returns
void

public static saving (Closure | string $callback, integer $priority) : void

Register a saving model event with the dispatcher.

Parameters
Property Description
$callback
Closure | string
$priority
integer
Returns
void

public setAttribute (string $key, mixed $value) : $this

Set a given attribute on the model.

Parameters
Property Description
$key
string
$value
mixed
Returns
$this

public static setCacheManager (Illuminate\Cache\CacheManager $cache) : void

Set the cache manager instance.

Parameters
Property Description
$cache
Illuminate\Cache\CacheManager
Returns
void

public setDatasource (string $name) : $this

Set the datasource associated with the model.

Parameters
Property Description
$name
string
Returns
$this

public static setDatasourceResolver (Winter\Storm\Halcyon\Datasource\ResolverInterface $resolver) : void

Set the datasource resolver instance.

Parameters
Property Description
$resolver
Winter\Storm\Halcyon\Datasource\ResolverInterface
Returns
void

public static setEventDispatcher (Illuminate\Contracts\Events\Dispatcher $dispatcher) : void

Set the event dispatcher instance.

Parameters
Property Description
$dispatcher
Illuminate\Contracts\Events\Dispatcher
Returns
void

public setFileNameAttribute (mixed $value)

File name should always contain an extension.

Parameters
Property Description
$value
mixed
Returns
mixed

public setLoadedFromCache ($value) : void

Returns true if the object was loaded from the cache.

Parameters
Property Description
$value
mixed
Returns
void

public setObservableEvents (array $observables) : $this

Set the observable event names.

Parameters
Property Description
$observables
array
Returns
$this

public setRawAttributes (array $attributes, boolean $sync = false) : $this

Set the array of model attributes. No checking is done.

Parameters
Property Description
$attributes
array
$sync
boolean
Returns
$this

public setSettingsAttribute (mixed $value)

Filling the settings should merge it with attributes.

Parameters
Property Description
$value
mixed
Returns
mixed

public syncOriginal () : $this

Sync the original attributes with the current.

Returns
$this

public syncOriginalAttribute (string $attribute) : $this

Sync a single original attribute with its current value.

Parameters
Property Description
$attribute
string
Returns
$this

public toArray () : array

Convert the model instance to an array.

Returns
array

public toJson (integer $options) : string

Convert the model instance to JSON.

Parameters
Property Description
$options
integer
Returns
string

public static unsetCacheManager () : void

Unset the cache manager for models.

Returns
void

public static unsetDatasourceResolver () : void

Unset the datasource resolver for models.

Returns
void

public static unsetEventDispatcher () : void

Unset the event dispatcher for models.

Returns
void

public update (array $attributes = []) : bool | int

Update the model in the database.

Parameters
Property Description
$attributes
array
Returns
bool | int

public static updated (Closure | string $callback, integer $priority) : void

Register an updated model event with the dispatcher.

Parameters
Property Description
$callback
Closure | string
$priority
integer
Returns
void

public static updating (Closure | string $callback, integer $priority) : void

Register an updating model event with the dispatcher.

Parameters
Property Description
$callback
Closure | string
$priority
integer
Returns
void

protected static boot () : void

The "booting" method of the model.

Returns
void

protected bootIfNotBooted () : void

Check if the model needs to be booted and if so, do it.

Returns
void

protected bootNicerEvents ()

Bind some nicer events to this model, in the format of method overrides.

Returns
mixed

protected static bootTraits () : void

Boot all of the bootable traits on the model.

Returns
void

protected fillableFromArray (array $attributes) : array

Get the fillable attributes of a given array.

Parameters
Property Description
$attributes
array
Returns
array

protected finishSave () : void

Finish processing on a successful save operation.

Returns
void

protected fireModelEvent (string $event, boolean $halt = true) : mixed

Fire the given event for the model.

Parameters
Property Description
$event
string
$halt
boolean
Returns
mixed

protected getArrayableAppends () : array

Get all of the appendable values that are arrayable.

Returns
array

protected getAttributeFromArray (string $key) : mixed

Get an attribute from the $attributes array.

Parameters
Property Description
$key
string
Returns
mixed

protected mutateAttribute (string $key, mixed $value) : mixed

Get the value of an attribute using its mutator.

Parameters
Property Description
$key
string
$value
mixed
Returns
mixed

protected mutateAttributeForArray (string $key, mixed $value) : mixed

Get the value of an attribute using its mutator for array conversion.

Parameters
Property Description
$key
string
$value
mixed
Returns
mixed

protected originalIsNumericallyEquivalent (string $key) : bool

Determine if the new and old values for a given key are numerically equivalent.

Parameters
Property Description
$key
string
Returns
bool

protected performDeleteOnModel () : void

Perform the actual delete query on this model instance.

Returns
void

protected performInsert (Winter\Storm\Halcyon\Builder $query) : bool

Perform a model insert operation.

Parameters
Property Description
$query
Winter\Storm\Halcyon\Builder
Returns
bool

protected performUpdate (Winter\Storm\Halcyon\Builder $query) : bool

Perform a model update operation.

Parameters
Property Description
$query
Winter\Storm\Halcyon\Builder
Returns
bool

protected static registerModelEvent (string $event, Closure | string $callback, integer $priority) : void

Register a model event with the dispatcher.

Parameters
Property Description
$event
string
$callback
Closure | string
$priority
integer
Returns
void

public addDynamicMethod (string $dynamicName, callable $method, string $extension = null)

Inherited from Extendable

Programmatically adds a method to the extendable class

Parameters
Property Description
$dynamicName
string
$method
callable
$extension
string
Returns
mixed

public addDynamicProperty (string $dynamicName, mixed $value = null) : void

Inherited from Extendable

Programmatically adds a property to the extendable class

Parameters
Property Description
$dynamicName
string

The name of the property to add

$value
mixed

The value of the property

Returns
void

public asExtension (string $shortName) : mixed

Inherited from Extendable

Short hand for getClassExtension() method, except takes the short extension name, example:

$this->asExtension('FormController')

Parameters
Property Description
$shortName
string
Returns
mixed

public bindEvent (string | Closure | QueuedClosure $event, mixed $callback = null, integer $priority) : self

Inherited from Emitter

Create a new event binding.

Parameters
Property Description
$event
string | Closure | QueuedClosure
$callback
mixed

when the third parameter is omitted and a Closure or QueuedClosure is provided this parameter is used as an integer this is used as priority variable

$priority
integer
Returns
self

public bindEventOnce (string | Closure | QueuedClosure $event, QueuedClosure | Closure | null $callback = null) : self

Inherited from Emitter

Create a new event binding that fires once only

Parameters
Property Description
$event
string | Closure | QueuedClosure
$callback
QueuedClosure | Closure | null

When a Closure or QueuedClosure is provided as the first parameter this parameter can be omitted

Returns
self

public static clearExtendedClasses () : void

Inherited from Extendable

Clear the list of extended classes so they will be re-extended.

Returns
void

public extendClassWith (string $extensionName) : void

Inherited from Extendable

Dynamically extend a class with a specified behavior

Parameters
Property Description
$extensionName
string
Returns
void

public static extendableAddExtension (callable $callback, boolean $scoped = false, $outerScope = null) : void

Inherited from Extendable

Extends the class using a closure.

The closure will be provided a single parameter which is the instance of the extended class, by default.

You may optionally specify the callback as a scoped callback, which inherits the scope of the extended class and provides access to protected and private methods and properties. This makes any call using $this act on the extended class, not the class providing the extension.

If you use a scoped callback, you can provide the "outer" scope - or the scope of the class providing the extension, with the third parameter. The outer scope object will then be passed as the single parameter to the closure.

Parameters
Property Description
$callback
callable
$scoped
boolean
$outerScope
mixed
Returns
void

public extendableCall (string $name, array $params = null) : mixed

Inherited from Extendable

Magic method for __call().

Callback priority is as follows:

  • "Dynamic Methods" added locally to the object via addDynamicMethod($name, $callable)
  • Methods available on Behaviors that have been implemented by the object
  • Pass it to the parent's __call() method if it defines one
Parameters
Property Description
$name
string
$params
array
Returns
mixed

public static extendableCallStatic (string $name, array $params = null) : mixed

Inherited from Extendable

Magic method for __callStatic()

Parameters
Property Description
$name
string
$params
array
Returns
mixed

public extendableConstruct ()

Inherited from Extendable

This method should be called as part of the constructor.

Returns
mixed

public static extendableExtendCallback (callable $callback, boolean $scoped = false, $outerScope = null) : void

Inherited from Extendable

Helper method for ::extend() static method.

Parameters
Property Description
$callback
callable
$scoped
boolean
$outerScope
mixed
Returns
void

public extendableGet (string $name) : mixed | null

Inherited from Extendable

Magic method for __get()

Parameters
Property Description
$name
string
Returns
mixed | null

public extendableSet (string $name, mixed $value) : void

Inherited from Extendable

Magic method for __set()

Parameters
Property Description
$name
string
$value
mixed
Returns
void

public fireEvent (string $event, array $params = [], boolean $halt = false) : array | mixed | null

Inherited from Emitter

Fire an event and call the listeners.

Parameters
Property Description
$event
string

Event name

$params
array

Event parameters

$halt
boolean

Halt after first non-null result

Returns
array | mixed | null

If halted, the first non-null result. If not halted, an array of event results. Returns null if no listeners returned a result.

public getClassExtension (string $name) : mixed

Inherited from Extendable

Returns a behavior object from an extendable class, example:

$this->getClassExtension('Backend.Behaviors.FormController')

Parameters
Property Description
$name
string

Fully qualified behavior name

Returns
mixed

public getClassMethods () : array

Inherited from Extendable

Get a list of class methods, extension equivalent of get_class_methods()

Returns
array

public getDynamicProperties () : array

Inherited from Extendable

Returns all dynamic properties and their values

Returns
array

['property' => 'value']

public isClassExtendedWith (string $name) : bool

Inherited from Extendable

Check if extendable class is extended with a behavior object

Parameters
Property Description
$name
string

Fully qualified behavior name

Returns
bool

public methodExists (string $name) : bool

Inherited from Extendable

Checks if a method exists, extension equivalent of method_exists()

Parameters
Property Description
$name
string
Returns
bool

public propertyExists (string $name) : bool

Inherited from Extendable

Checks if a property exists, extension equivalent of property_exists()

Parameters
Property Description
$name
string
Returns
bool

public unbindEvent (string | array | object $event = null) : self

Inherited from Emitter

Destroys an event binding.

Parameters
Property Description
$event
string | array | object

Event to destroy

Returns
self

protected emitterEventSortEvents (string $eventName) : void

Inherited from Emitter

Sort the listeners for a given event by priority.

Parameters
Property Description
$eventName
string
Returns
void

protected extendableAddLocalExtension (Closure $callback, $outerScope = null)

Inherited from Extendable

Adds local extensibility to the current instance.

This rebinds a given closure to the current instance, making it able to access protected and private methods. This makes any call using $this within the closure act on the extended class, not the class providing the extension.

An outer scope may be provided by providing a second parameter, which will then be passed through to the closure as its first parameter. If this is not given, the current instance will be provided as the first parameter.

Parameters
Property Description
$callback
Closure
$outerScope
mixed
Returns
mixed

protected extendableIsAccessible (mixed $class, string $propertyName) : bool

Inherited from Extendable

Checks if a property is accessible, property equivalent of is_callable()

Parameters
Property Description
$class
mixed
$propertyName
string
Returns
bool

protected extensionExtractMethods (string $extensionName, object $extensionObject) : void

Inherited from Extendable

Extracts the available methods from a behavior and adds it to the list of callable methods.

Parameters
Property Description
$extensionName
string
$extensionObject
object
Returns
void

protected extensionGetClassLoader () : Winter\Storm\Support\ClassLoader | null

Inherited from Extendable

Gets the class loader

Returns
Winter\Storm\Support\ClassLoader | null

protected extensionNormalizeClassName (string $name) : string

Inherited from Extendable

Normalizes the provided extension name allowing for the ClassLoader to inject aliased classes

Parameters
Property Description
$name
string
Returns
string

protected parseEventAndPayload (mixed $event, mixed $payload = null) : array

Inherited from Emitter

Parse the given event and payload and prepare them for dispatching.

Parameters
Property Description
$event
mixed
$payload
mixed
Returns
array
Copyright © 2024 Winter CMS