Класс Behavior
Базовый класс для поведения.
Поведения позволяют вам моделировать миксины и создавать переиспользуемые блоки логики приложения, которые можно использовать в нескольких моделях. Поведения также обеспечивают способ подключения к обратным вызовам модели и дополнения их поведения.
Методы миксина
Поведения могут предоставлять функции, подобные миксинам, объявляя публичные методы. Эти методы будут доступны в таблицах, к которым добавлено поведение.
function doSomething($arg1, $arg2) { // do something }
Будет вызываться так $table->doSomething($arg1, $arg2);.
Методы обратного вызова
Поведения могут прослушивать любые события, генерируемые в Таблице. По умолчанию CakePHP предоставляет ряд событий жизненного цикла, за которыми могут следить ваши поведения:
-
beforeFind(Event $event, Query $query, ArrayObject $options, boolean $primary)Вызывается перед каждой операцией поиска. Остановив событие и предоставив возвращаемое значение, вы можете полностью обойти операцию поиска. Любые изменения, внесенные в экземпляр $query, сохранятся для остальной части поиска. Параметр $primary указывает, является ли это корневым запросом или связанным запросом. -
buildValidator(Event $event, Validator $validator, string $name)Вызывается, когда объект валидатора, идентифицированный по имени $name, создается. Вы можете использовать этот обратный вызов для добавления правил валидации или поставщиков валидации. -
buildRules(Event $event, RulesChecker $rules)Вызывается при создании объекта проверки правил для таблицы. Вы можете использовать этот обратный вызов, чтобы добавить больше правил в набор. -
beforeRules(Event $event, EntityInterface $entity, ArrayObject $options, $operation)Вызывается перед валидацией сущности с помощью проверяющего правил. Остановив это событие, вы можете вернуть окончательное значение операции проверки правил. -
afterRules(Event $event, EntityInterface $entity, ArrayObject $options, bool $result, $operation)Вызывается после проверки правил на сущности. Остановив это событие, вы можете вернуть окончательное значение операции проверки правил. -
beforeSave(Event $event, EntityInterface $entity, ArrayObject $options)Вызывается перед сохранением каждой сущности. Остановка этого события прервет операцию сохранения. При остановке события возвращается результат события. -
afterSave(Event $event, EntityInterface $entity, ArrayObject $options)Вызывается после сохранения сущности. -
beforeDelete(Event $event, EntityInterface $entity, ArrayObject $options)Вызывается перед удалением сущности. Остановив это событие, вы прервете операцию удаления. -
afterDelete(Event $event, EntityInterface $entity, ArrayObject $options)Вызывается после удаления сущности.
В дополнение к основным событиям, поведения могут реагировать на любые события, генерируемые вашими классами таблиц, включая пользовательские события.
Вы можете установить приоритет обратных вызовов поведения, используя параметр priority при присоединении поведения. Это установит приоритет для всех обратных вызовов, предоставляемых поведением.
Методы поиска
Поведения могут предоставлять методы поиска, которые подключаются к методу find() таблицы. Пользовательские поисковые методы — отличный способ предоставить предварительно заданные запросы, связанные с вашим поведением. Например, SluggableBehavior может предоставить метод поиска find('slugged'). Поисковые методы поведения реализуются так же, как и другие поисковые методы. Любой метод, начинающийся с find будет настроен как поисковый метод. Ваши поисковые методы должны ожидать следующих аргументов:
findSlugged(Query $query, array $options)
- Cake\ORM\Behavior реализует Cake\Event\EventListenerInterface использует Cake\Core\InstanceConfigTrait
Прямые известные подклассы
Cake\ORM\Behavior\CounterCacheBehavior, Cake\ORM\Behavior\TimestampBehavior, Cake\ORM\Behavior\TranslateBehavior, Cake\ORM\Behavior\TreeBehaviorСм.:
Cake\ORM\Table::addBehavior()См.:
Cake\Event\EventManagerРасположено в ORM/Behavior.php
Подробности метода
__constructsource public
__construct( Cake\ORM\Table $table , array $config [] )
Конструктор
Объединяет конфигурацию с настройками по умолчанию и хранит ее в свойстве config
Параметры
-
Cake\ORM\Table$table - Таблица, к которой прикреплено данное поведение.
- массив
$configнеобязательно [] - Настройка для данного поведения.
_reflectionCachesource protected
_reflectionCache( )
Получает методы, реализованные этим поведением
Использует метод implementedEvents() для исключения методов обратного вызова. Методы, начинающиеся с _ будут проигнорированы, как и методы, объявленные в Cake\ORM\Behavior
Возвращает
arrayмассив
_resolveMethodAliasessource protected
_resolveMethodAliases( string $key , array $defaults , array $config )
Удаляет алиасированные методы, которые в противном случае дублировались бы пользовательскими настройками.
Параметры
- строка
$key - Ключ для фильтрации.
- массив
$defaults - Настройки по умолчанию для методов.
- массив
$config - Настроенные сопоставления методов.
Возвращает
arrayСписок конфигурационных данных без дублирования.
implementedEventssource public
implementedEvents( )
Получает обратные вызовы модели, которыми интересуется это поведение.
Определив один из методов обратного вызова, предполагается, что поведение заинтересовано в соответствующем событии.
Переопределите этот метод, если вам нужно добавить нестандартные обработчики событий. Или если вы хотите, чтобы ваше поведение отслеживало нестандартные события.
Возвращает
arrayмассив
Реализация
Cake\Event\EventListenerInterface::implementedEvents() implementedFinderssource public
implementedFinders( )
implementedFinders
Предоставляет отображение алиас->имя_метода для методов поиска, реализуемых поведением. Пример:
[ 'this' => 'findThis', 'alias' => 'findMethodName' ]
С приведенным примером, вызов $Table->find('this') вызовет $Behavior->findThis(), а вызов $Table->find('alias') вызовет $Behavior->findMethodName()
Рекомендуется, хотя и не обязательно, определять implementedFinders в свойстве config дочерних классов, чтобы не было необходимости использовать рефлексию для вывода доступного списка методов. См. примеры основных поведений
Возвращает
arrayмассив
implementedMethodssource public
implementedMethods( )
implementedMethods
Предоставляет отображение алиас->имя_метода для методов, реализуемых поведением. Пример:
[ 'method' => 'method', 'aliasedmethod' => 'somethingElse' ]
С приведенным примером, вызов $Table->method() вызовет $Behavior->method(), а вызов $Table->aliasedmethod() вызовет $Behavior->somethingElse()
Рекомендуется, хотя и не обязательно, определять implementedFinders в свойстве config дочерних классов, чтобы не было необходимости использовать рефлексию для вывода доступного списка методов. См. примеры основных поведений
Возвращает
arrayмассив
initializesource public
initialize( array $config )
Метод подключения конструктора.
Реализуйте этот метод, чтобы избежать необходимости переопределения конструктора и вызова родительского класса.
Параметры
- массив
$config - Параметры конфигурации, предоставленные данному поведению.
verifyConfigsource public
verifyConfig( )
verifyConfig
Проверяет, что реализованные ключи содержат значения, указывающие на вызываемые элементы.
Возбуждает
Cake\Core\Exception\Exceptionесли конфигурация неверна
Методы, используемые из Cake\Core\InstanceConfigTrait
_configDeletesource protected
_configDelete( string $key )
Удаление одного ключа конфигурации
Параметры
- строка
$key - Ключ для удаления.
Возбуждает
Cake\Core\Exception\Exceptionесли пытаетесь перезаписать существующую конфигурацию
_configReadsource protected
_configRead( string|null $key )
Чтение переменной конфигурации
Параметры
- строка|null
$key - Ключ для чтения.
Возвращает
mixedсмешанный тип
_configWritesource protected
_configWrite( string|array $key , mixed $value , boolean|string $merge false )
Запись переменной конфигурации
Параметры
- строка|массив
$key - Ключ для записи.
- смешанный тип
$value - Значение для записи.
- логическое|строка
$mergeнеобязательно false - Истинно для рекурсивного слияния, 'поверхностно' для простого слияния, ложно для перезаписи, по умолчанию ложно.
Возбуждает
Cake\Core\Exception\Exceptionесли пытаетесь перезаписать существующую конфигурацию
configsource public
config( string|array|null $key null , mixed|null $value null , boolean $merge true )
Использование
Чтение всего конфигурационного файла:
$this->config();
Чтение определенного значения:
$this->config('key');
Чтение вложенного значения:
$this->config('some.nested.key');
Установка определенного значения:
$this->config('key', $value);
Установка вложенного значения:
$this->config('some.nested.key', $value);
Обновление нескольких настроек конфигурации одновременно:
$this->config(['one' => 'value', 'another' => 'value']);
Параметры
- string|array|null
$keyнеобязательно null - Ключ для получения/установки или полный массив настроек.
- mixed|null
$valueнеобязательно null - Значение для установки.
- boolean
$mergeнеобязательно true - Выполнять рекурсивное слияние или перезапись существующей конфигурации, по умолчанию true.
Возвращает
mixedЗначение конфигурации, которое читается, или сам объект при операциях записи.
Выбрасывает
Cake\Core\Exception\ExceptionПри попытке установить недопустимый ключ.
configShallowsource public
configShallow( string|array $key , mixed|null $value null )
Объединение предоставленной конфигурации с существующей конфигурацией. В отличие от config() , которая выполняет рекурсивное объединение для вложенных ключей, этот метод выполняет простое объединение.
Установка определенного значения:
$this->config('key', $value);
Установка вложенного значения:
$this->config('some.nested.key', $value);
Обновление нескольких настроек конфигурации одновременно:
$this->config(['one' => 'value', 'another' => 'value']);
Параметры
- string|array
$key - Ключ для установки или полный массив настроек.
- mixed|null
$valueнеобязательно null - Значение для установки.
Возвращает
mixed$this Сам объект.
Резюме свойств
Свойства, используемые из Cake\Core\InstanceConfigTrait
$_configInitializedsource
protected boolean
Указатель, уже ли свойство конфигурации было настроено с значениями по умолчанию
false
© 2005–2016 The Cake Software Foundation, Inc.
Licensed under the MIT License.
CakePHP is a registered trademark of Cake Software Foundation, Inc.
We are not endorsed by or affiliated with CakePHP.
http://api.cakephp.org/3.1/class-Cake.ORM.Behavior.html