Класс yii\behaviors\AttributeTypecastBehavior
| Наследование | yii\behaviors\AttributeTypecastBehavior » yii\base\Behavior » yii\base\Object |
|---|---|
| Реализует | yii\base\Configurable |
| Доступно с версии | 2.0.10 |
| Исходный код | https://github.com/yiisoft/yii2/blob/master/framework/behaviors/AttributeTypecastBehavior.php |
AttributeTypecastBehavior предоставляет возможность автоматического приведения типов атрибутов модели.
Этот бихевиор очень полезен при использовании ActiveRecord для схемозависимых баз данных, таких как MongoDB или Redis. Он также может пригодиться для обычных yii\db\ActiveRecord или даже yii\base\Model, позволяя поддерживать строгие типы атрибутов после валидации модели.
Этот бихевиор должен быть прикреплён к yii\base\Model или наследнику yii\db\BaseActiveRecord.
Вы должны указать точные типы атрибутов через $attributeTypes.
Например:
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,
],
];
}
// ...
}
Подсказка: вы можете оставить $attributeTypes пустым — в этом случае его значение будет определено автоматически на основе правил валидации владельца. Следующий пример автоматически создаст то же значение $attributeTypes, что и в предыдущем:
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()`
],
];
}
// ...
}
Этот бихевиор позволяет автоматически приводить типы атрибутов в следующих случаях:
- после успешной валидации модели
- перед сохранением модели (вставка или обновление)
- после поиска модели (найденной запросом или обновлённой)
Вы можете управлять автоматическим приведением типов для конкретного случая, используя поля $typecastAfterValidate, $typecastBeforeSave и $typecastAfterFind. По умолчанию приведение типов будет выполняться только после валидации модели.
Примечание: вы можете вручную вызвать приведение типов атрибутов в любое время, вызвав метод typecastAttributes():
$model = new Item(); $model->price = '38.5'; $model->is_active = 1; $model->typecastAttributes();
Открытые свойства
| Свойство | Тип | Описание | Определено |
|---|---|---|---|
| $attributeTypes | массив | Карта приведения типов атрибутов в формате: имяАтрибута => тип. | yii\behaviors\AttributeTypecastBehavior |
| $owner | yii\base\Model|yii\db\BaseActiveRecord | Владелец данного бихевиора. | yii\behaviors\AttributeTypecastBehavior |
| $skipOnNull | булево | Пропускать ли приведение типов для null значений. | yii\behaviors\AttributeTypecastBehavior |
| $typecastAfterFind | булево | Выполнять ли приведение типов после получения данных модели владельца из базы данных (после поиска или обновления). | yii\behaviors\AttributeTypecastBehavior |
| $typecastAfterValidate | булево | Выполнять ли приведение типов после валидации модели владельца. | yii\behaviors\AttributeTypecastBehavior |
| $typecastBeforeSave | булево | Выполнять ли приведение типов перед сохранением модели владельца (вставка или обновление). | yii\behaviors\AttributeTypecastBehavior |
Открытые методы
| Метод | Описание | Определено |
|---|---|---|
| __call() | Вызывает метод с заданным именем, который не является методом класса. | yii\base\Object |
| __construct() | Конструктор. | yii\base\Object |
| __get() | Возвращает значение свойства объекта. | yii\base\Object |
| __isset() | Проверяет, задано ли свойство, т.е. определено и не равно null. | yii\base\Object |
| __set() | Устанавливает значение свойства объекта. | yii\base\Object |
| __unset() | Устанавливает свойство объекта в значение null. | yii\base\Object |
| afterFind() | Обрабатывает событие 'afterFind' владельца, гарантируя приведение типов атрибутов. | yii\behaviors\AttributeTypecastBehavior |
| afterValidate() | Обрабатывает событие 'afterValidate' владельца, гарантируя приведение типов атрибутов. | yii\behaviors\AttributeTypecastBehavior |
| attach() | Прикрепляет объект бихевиора к компоненту. | yii\behaviors\AttributeTypecastBehavior |
| beforeSave() | Обрабатывает события 'afterInsert' и 'afterUpdate' владельца, гарантируя приведение типов атрибутов. | yii\behaviors\AttributeTypecastBehavior |
| canGetProperty() | Возвращает значение, указывающее, можно ли прочитать свойство. | yii\base\Object |
| canSetProperty() | Возвращает значение, указывающее, можно ли установить свойство. | yii\base\Object |
| className() | Возвращает полное имя этого класса. | yii\base\Object |
| clearAutoDetectedAttributeTypes() | Очищает внутренний статический кэш автоматически обнаруженных значений $attributeTypes для всех затронутых классов владельцев. | yii\behaviors\AttributeTypecastBehavior |
| detach() | Открепляет объект бихевиора от компонента. | yii\base\Behavior |
| events() | Объявляет обработчики событий для событий $owner. | yii\behaviors\AttributeTypecastBehavior |
| hasMethod() | Возвращает значение, указывающее, определён ли метод. | yii\base\Object |
| hasProperty() | Возвращает значение, указывающее, определено ли свойство. | yii\base\Object |
| init() | Инициализирует объект. | yii\base\Object |
| typecastAttributes() | Приводит типы атрибутов владельца в соответствии с $attributeTypes. | yii\behaviors\AttributeTypecastBehavior |
Защищённые методы
| Метод | Описание | Определено |
|---|---|---|
| detectAttributeTypes() | Составляет значение по умолчанию для $attributeTypes из правил валидации владельца. | yii\behaviors\AttributeTypecastBehavior |
| typecastValue() | Преобразует заданное значение в указанный тип. | yii\behaviors\AttributeTypecastBehavior |
Константы
| Константа | Значение | Описание | Определено в |
|---|---|---|---|
| TYPE_BOOLEAN | 'boolean' | yii\behaviors\AttributeTypecastBehavior | |
| TYPE_FLOAT | 'float' | yii\behaviors\AttributeTypecastBehavior | |
| TYPE_INTEGER | 'integer' | yii\behaviors\AttributeTypecastBehavior | |
| TYPE_STRING | 'string' | yii\behaviors\AttributeTypecastBehavior |
Подробное описание свойств
$attributeTypes общедоступное свойство
Карта типов преобразования атрибутов в формате: имяАтрибута => тип. Тип может быть задан с помощью вызова PHP, принимающего исходное значение в качестве аргумента и возвращающего результат преобразования. Например:
[
'amount' => 'integer',
'price' => 'float',
'is_active' => 'boolean',
'date' => function ($value) {
return ($value instanceof \DateTime) ? $value->getTimestamp(): (int)$value;
},
]
Если не задано, карта типов атрибутов будет составлена автоматически из правил валидации владельца.
public array $attributeTypes = null
$owner общедоступное свойство
Владелец данного поведения.
public yii\base\Model|yii\db\BaseActiveRecord $owner = null
$skipOnNull общедоступное свойство
Необходимо ли пропускать преобразование типов для значений null. Если включено, значение атрибута, равное null, не будет преобразовано (например, null останется null), в противном случае оно будет преобразовано в соответствии с типом, настроенным в $attributeTypes.
public boolean $skipOnNull = true
$typecastAfterFind общедоступное свойство
Выполнять ли преобразование типов после извлечения данных модели владельца из базы данных (после find или refresh). Этот параметр можно отключить для повышения производительности. Например, при использовании yii\db\ActiveRecord, преобразование после find, как правило, не приносит пользы и может быть отключено. Обратите внимание, что изменение этого значения не повлияет после того, как это поведение было прикреплено к модели.
public boolean $typecastAfterFind = false
$typecastAfterValidate общедоступное свойство
Выполнять ли преобразование типов после валидации модели владельца. Обратите внимание, что преобразование типов будет выполнено только в случае успешной валидации, т. е. если у модели владельца нет ошибок. Обратите внимание, что изменение этого значения не повлияет после того, как это поведение было прикреплено к модели.
public boolean $typecastAfterValidate = true
$typecastBeforeSave общедоступное свойство
Выполнять ли преобразование типов перед сохранением модели владельца (вставка или обновление). Этот параметр можно отключить для повышения производительности. Например, при использовании yii\db\ActiveRecord, преобразование перед сохранением, как правило, не приносит пользы и может быть отключено. Обратите внимание, что изменение этого значения не повлияет после того, как это поведение было прикреплено к модели.
public boolean $typecastBeforeSave = false
Подробное описание методов
afterFind() общедоступный метод
Обрабатывает событие владельца 'afterFind', гарантируя преобразование типов атрибутов.
| public void afterFind ( $event ) | ||
|---|---|---|
| $event | yii\base\Event |
Экземпляр события. |
afterValidate() общедоступный метод
Обрабатывает событие владельца 'afterValidate', гарантируя преобразование типов атрибутов.
| public void afterValidate ( $event ) | ||
|---|---|---|
| $event | yii\base\Event |
Экземпляр события. |
attach() общедоступный метод
Прикрепляет объект поведения к компоненту.
Стандартная реализация установит свойство $owner и прикрепит обработчики событий, как указано в events(). Убедитесь, что вы вызываете родительскую реализацию, если переопределяете этот метод.
| public void attach ( $owner ) | ||
|---|---|---|
| $owner | yii\base\Component |
Компонент, к которому необходимо прикрепить это поведение. |
beforeSave() общедоступный метод
Обрабатывает события владельца 'afterInsert' и 'afterUpdate', гарантируя преобразование типов атрибутов.
| public void beforeSave ( $event ) | ||
|---|---|---|
| $event | yii\base\Event |
Экземпляр события. |
clearAutoDetectedAttributeTypes() общедоступный статический метод
Очищает внутренний статический кэш автоматически обнаруженных значений $attributeTypes по всем затронутым классам владельцев.
| public static void clearAutoDetectedAttributeTypes ( ) |
|---|
detectAttributeTypes() защищённый метод
Составляет значение по умолчанию для $attributeTypes из правил валидации владельца.
| protected array detectAttributeTypes ( ) | ||
|---|---|---|
| return | array |
Карта типов атрибутов. |
events() общедоступный метод
Объявляет обработчики событий для событий $owner.
Подклассы могут переопределять этот метод, чтобы объявить, какие PHP-обработчики должны быть прикреплены к событиям компонента $owner.
Обработчики будут прикреплены к событиям $owner при прикреплении поведения к владельцу; они будут откреплены от событий при откреплении поведения от компонента.
Обработчики могут быть любого из следующих типов:
- метод в этом поведении:
'handleClick', эквивалентно[$this, 'handleClick'] - метод объекта:
[$object, 'handleClick'] - статический метод:
['Page', 'handleClick'] - анонимная функция:
function ($event) { ... }
Вот пример:
[
Model::EVENT_BEFORE_VALIDATE => 'myBeforeValidate',
Model::EVENT_AFTER_VALIDATE => 'myAfterValidate',
]
| public array events ( ) | ||
|---|---|---|
| return | array |
События (ключи массива) и соответствующие методы обработчиков событий (значения массива). |
typecastAttributes() общедоступный метод
Преобразует атрибуты владельца в соответствии с $attributeTypes.
| public void typecastAttributes ( $attributeNames = null ) | ||
|---|---|---|
| $attributeNames | array |
Список имён атрибутов, которые должны быть преобразованы. Если этот параметр пустой, это означает, что все атрибуты, указанные в $attributeTypes, должны быть преобразованы. |
typecastValue() защищённый метод
Преобразует заданное значение в указанный тип.
| protected mixed typecastValue ( $value, $type ) | ||
|---|---|---|
| $value | mixed |
Значение, которое должно быть преобразовано. |
| $type | string|callable |
Имя типа или вызываемый объект для преобразования. |
| return | mixed |
Результат преобразования. |
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc-2.0/yii-behaviors-attributetypecastbehavior.html