PHP Class yii\behaviors\AttributeTypecastBehavior

This behavior is very useful in case of usage of ActiveRecord for the schema-less databases like MongoDB or Redis. It may also come in handy for regular ActiveRecord or even Model, allowing to maintain strict attribute types after model validation. This behavior should be attached to Model or BaseActiveRecord descendant. You should specify exact attribute types via [[attributeTypes]]. For example: php use yii\behaviors\AttributeTypecastBehavior; class Item extends \yii\db\ActiveRecord { public function behaviors() { return [ 'typecast' => [ 'class' => AttributeTypecastBehavior::className(), 'attributeTypes' => [ 'amount' => AttributeTypecastBehavior::TYPE_INTEGER, 'price' => AttributeTypecastBehavior::TYPE_FLOAT, 'is_active' => AttributeTypecastBehavior::TYPE_BOOLEAN, ], 'typecastAfterValidate' => true, 'typecastBeforeSave' => false, 'typecastAfterFind' => false, ], ]; } ... } Tip: you may left [[attributeTypes]] blank - in this case its value will be detected automatically based on owner validation rules. Following example will automatically create same [[attributeTypes]] value as it was configured at the above one: php use yii\behaviors\AttributeTypecastBehavior; class Item extends \yii\db\ActiveRecord { public function rules() { return [ ['amount', 'integer'], ['price', 'number'], ['is_active', 'boolean'], ]; } public function behaviors() { return [ 'typecast' => [ 'class' => AttributeTypecastBehavior::className(), 'attributeTypes' will be composed automatically according to rules() ], ]; } ... } This behavior allows automatic attribute typecasting at following cases: - after successful model validation - before model save (insert or update) - after model find (found by query or refreshed) You may control automatic typecasting for particular case using fields [[typecastAfterValidate]], [[typecastBeforeSave]] and [[typecastAfterFind]]. By default typecasting will be performed only after model validation. Note: you can manually trigger attribute typecasting anytime invoking AttributeTypecastBehavior::typecastAttributes method: php $model = new Item(); $model->price = '38.5'; $model->is_active = 1; $model->typecastAttributes();
Since: 2.0.10
Author: Paul Klimov ([email protected])
Inheritance: extends yii\base\Behavior
Datei anzeigen Open project: yiisoft/yii2 Class Usage Examples

Public Properties

Property Type Description
$attributeTypes attribute typecast map in format: attributeName => type. Type can be set via PHP callable, which accept raw value as an argument and should return typecast result. For example: php [ 'amount' => 'integer', 'price' => 'float', 'is_active' => 'boolean', 'date' => function ($value) { return ($value instanceof \DateTime) ? $value->getTimestamp(): (int)$value; }, ] If not set, attribute type map will be composed automatically from the owner validation rules.
$owner the owner of this behavior.
$skipOnNull whether to skip typecasting of null values. If enabled attribute value which equals to null will not be type-casted (e.g. null remains null), otherwise it will be converted according to the type configured at [[attributeTypes]].
$typecastAfterFind whether to perform typecasting after retrieving owner model data from the database (after find or refresh). This option may be disabled in order to achieve better performance. For example, in case of ActiveRecord usage, typecasting after find will grant no benefit in most cases an thus can be disabled. Note that changing this option value will have no effect after this behavior has been attached to the model.
$typecastAfterValidate whether to perform typecasting after owner model validation. Note that typecasting will be performed only if validation was successful, e.g. owner model has no errors. Note that changing this option value will have no effect after this behavior has been attached to the model.
$typecastBeforeSave whether to perform typecasting before saving owner model (insert or update). This option may be disabled in order to achieve better performance. For example, in case of ActiveRecord usage, typecasting before save will grant no benefit an thus can be disabled. Note that changing this option value will have no effect after this behavior has been attached to the model.

Public Methods

Method Description
afterFind ( Event $event ) Handles owner 'afterFind' event, ensuring attribute typecasting.
afterValidate ( Event $event ) Handles owner 'afterValidate' event, ensuring attribute typecasting.
attach ( $owner )
beforeSave ( Event $event ) Handles owner 'afterInsert' and 'afterUpdate' events, ensuring attribute typecasting.
clearAutoDetectedAttributeTypes ( ) Clears internal static cache of auto detected [[attributeTypes]] values over all affected owner classes.
events ( )
typecastAttributes ( array $attributeNames = null ) Typecast owner attributes according to [[attributeTypes]].

Protected Methods

Method Description
detectAttributeTypes ( ) : array Composes default value for [[attributeTypes]] from the owner validation rules.
typecastValue ( mixed $value, string | callable $type ) : mixed Casts the given value to the specified type.

Method Details

afterFind() public method

Handles owner 'afterFind' event, ensuring attribute typecasting.
public afterFind ( Event $event )
$event yii\base\Event event instance.

afterValidate() public method

Handles owner 'afterValidate' event, ensuring attribute typecasting.
public afterValidate ( Event $event )
$event yii\base\Event event instance.

attach() public method

public attach ( $owner )

beforeSave() public method

Handles owner 'afterInsert' and 'afterUpdate' events, ensuring attribute typecasting.
public beforeSave ( Event $event )
$event yii\base\Event event instance.

clearAutoDetectedAttributeTypes() public static method

Clears internal static cache of auto detected [[attributeTypes]] values over all affected owner classes.

detectAttributeTypes() protected method

Composes default value for [[attributeTypes]] from the owner validation rules.
protected detectAttributeTypes ( ) : array
return array attribute type map.

events() public method

public events ( )

typecastAttributes() public method

Typecast owner attributes according to [[attributeTypes]].
public typecastAttributes ( array $attributeNames = null )
$attributeNames array list of attribute names that should be type-casted. If this parameter is empty, it means any attribute listed in the [[attributeTypes]] should be type-casted.

typecastValue() protected method

Casts the given value to the specified type.
protected typecastValue ( mixed $value, string | callable $type ) : mixed
$value mixed value to be type-casted.
$type string | callable type name or typecast callable.
return mixed typecast result.

Property Details

$attributeTypes public_oe property

attribute typecast map in format: attributeName => type. Type can be set via PHP callable, which accept raw value as an argument and should return typecast result. For example: php [ 'amount' => 'integer', 'price' => 'float', 'is_active' => 'boolean', 'date' => function ($value) { return ($value instanceof \DateTime) ? $value->getTimestamp(): (int)$value; }, ] If not set, attribute type map will be composed automatically from the owner validation rules.
public $attributeTypes

$owner public_oe property

the owner of this behavior.
public $owner

$skipOnNull public_oe property

whether to skip typecasting of null values. If enabled attribute value which equals to null will not be type-casted (e.g. null remains null), otherwise it will be converted according to the type configured at [[attributeTypes]].
public $skipOnNull

$typecastAfterFind public_oe property

whether to perform typecasting after retrieving owner model data from the database (after find or refresh). This option may be disabled in order to achieve better performance. For example, in case of ActiveRecord usage, typecasting after find will grant no benefit in most cases an thus can be disabled. Note that changing this option value will have no effect after this behavior has been attached to the model.
public $typecastAfterFind

$typecastAfterValidate public_oe property

whether to perform typecasting after owner model validation. Note that typecasting will be performed only if validation was successful, e.g. owner model has no errors. Note that changing this option value will have no effect after this behavior has been attached to the model.
public $typecastAfterValidate

$typecastBeforeSave public_oe property

whether to perform typecasting before saving owner model (insert or update). This option may be disabled in order to achieve better performance. For example, in case of ActiveRecord usage, typecasting before save will grant no benefit an thus can be disabled. Note that changing this option value will have no effect after this behavior has been attached to the model.
public $typecastBeforeSave