Behaviors
Behaviors allow to set and/or modify model field data by attaching the behavior to the model. A behavior can be implemented once an attached to different models, the number of behaviors that can be attached is unlimited.
A good example is a slug for a page, this is based on a title and needs to be updated during the commit. This slug can then be used in the URL to retrieve the model.
public function behavior()
{
return array(
// Guid generation
// Generate a guid and store in in the guid column
'Guid' => array('column' => 'guid'),
// Slug generation
// Generate a slug from the title column and store in in the slug column
'Slug' => array('source'=>'title', column' => 'slug'),
);
}
Behaviors types
Guid
This behavior will generate a GUID and store it in the specified column.
If the column
key is ommited the ‘guid
’ column will be used to store the generated GUID.
public function behavior()
{
return array(
...
'Guid' => array(
'column' => '[column name]'
),
...
);
}
Slug
This behavior will generate a slug from the source
field and store it in the specified column.
If the source
key is ommited the ‘name
’ column will be used to create the slug. If the column
key is ommited the ‘slug
’ column will be used to create the slug.
public function behavior()
{
return array(
...
'Slug' => array(
'source' => '[column name]',
'column' => '[column name]'
),
...
);
}
LocalBehavior
Allows the creation of a local behavior that is model specific.
The function takes up to two arguments; the first argument contains the type of operation on the model and can be either ‘construct
’ during construction of the model class, ‘update
’ when the model is updated or ‘create
’ when the model is created.
public function behavior()
{
return array(
...
// Callback static method
TRUE => array('MyClass::static_method'),
// Callback method
TRUE => array($this, 'custom_behavior')),
// Function as the callback (PHP 5.3+)
TRUE => function($action) {
// Do something to $value and return it.
return some_function($action);
},
...
);
}
Writing new behaviors
It is possible to create custom behaviors that can be reused in different models.
Create a subclass of the ORM_Behavior
class and implement the on_construct
, on_update
and on_create
functions.
class ORM_Behavior_MyBehavior extends ORM_Behavior {
/**
* Constructs a new model and loads a record if given
*
* @param ORM $model The model
* @param mixed $id Parameter for find or object to load
*/
public function on_construct($model, $id)
{
// return FALSE if the model is loaded from this function.
return TRUE;
}
/**
* The model is updated
*
* @param ORM $model The model
*/
public function on_update($model)
{
// Modify or update the appropriate fields
}
/**
* A new model is created, add a guid value
*
* @param ORM $model The model
*/
public function on_create($model)
{
// Modify or update the appropriate fields
}
}