Spec-Zone.ru › Yii 2.0

Класс 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API