Дерево поведения
Делает таблицу, к которой прикреплено это поведение, похожей на вложенный набор и предоставляет методы для управления и извлечения информации из полученной иерархической структуры.
Таблицы, прикрепляющие это поведение, должны содержать столбец, ссылающийся на родительскую строку, и два других числовых столбца (lft и rght), где неявный порядок будет кэшироваться.
Для получения дополнительной информации о том, что такое вложенный набор и как он работает, обратитесь к http://www.sitepoint.com/hierarchical-data-database-2/
- Cake\ORM\Behavior реализует Cake\Event\EventListenerInterface использует Cake\Core\InstanceConfigTrait
-
Cake\ORM\Behavior\TreeBehavior
Подробное описание метода
_ensureFieldsисходный код protected
_ensureFields( Cake\Datasource\EntityInterface $entity )
Убеждается, что предоставленная сущность содержит ненулевые значения для полей left и right
Параметры
-
Cake\Datasource\EntityInterface$entity - Сущность, для которой необходимо убедиться, что поля заполнены
_getMaxисходный код protected
_getMax( )
Возвращает максимальное значение индекса в таблице.
Возвращаемое значение
integerint
_getNodeисходный код protected
_getNode( mixed $id )
Возвращает единственный узел из дерева по его первичному ключу
Параметры
- mixed
$id - Идентификатор записи.
Возвращаемое значение
Cake\ORM\Entity\Cake\ORM\Entity
Исключения
Cake\Datasource\Exception\RecordNotFoundExceptionПри отсутствии узла
_getPrimaryKeyисходный код protected
_getPrimaryKey( )
Возвращает единственное строковое значение, представляющее первичный ключ присоединенной таблицы
Возвращаемое значение
stringstring
_moveDownисходный код protected
_moveDown( Cake\Datasource\EntityInterface $node , integer|boolean $number )
Вспомогательная функция, используемая с фактическим кодом для moveDown
Параметры
-
Cake\Datasource\EntityInterface$node - Узел, который нужно переместить
- integer|boolean
$number - На сколько позиций нужно переместить узел, или true для перемещения в последнюю позицию
Возвращаемое значение
Cake\ORM\Entity|boolean$node Узел после перемещения или false при ошибке
Исключения
Cake\Datasource\Exception\RecordNotFoundExceptionПри отсутствии узла
_moveUpисходный код protected
_moveUp( Cake\Datasource\EntityInterface $node , integer|boolean $number )
Вспомогательная функция, используемая с фактическим кодом для moveUp
Параметры
-
Cake\Datasource\EntityInterface$node - Узел, который нужно переместить
- integer|boolean
$number - На сколько позиций нужно переместить узел, или true для перемещения в первую позицию
Возвращаемое значение
Cake\ORM\Entity|boolean$node Узел после перемещения или false при ошибке
Исключения
Cake\Datasource\Exception\RecordNotFoundExceptionПри отсутствии узла
_recoverTreeисходный код protected
_recoverTree( integer $counter 0 , mixed $parentId null , integer $level -1 )
Рекурсивный метод, используемый для восстановления одного уровня дерева
Параметры
- integer
$counterнеобязательный 0 - Последнее значение левого столбца, которое было назначено
- mixed
$parentIdнеобязательный null - идентификатор родителя уровня, который должен быть восстановлен
- integer
$levelнеобязательный -1 - Уровень узла
Возвращаемое значение
integerСледующее значение для использования в левом столбце
_removeFromTreeисходный код protected
_removeFromTree( Cake\Datasource\EntityInterface $node )
Вспомогательная функция, содержащая фактический код для removeFromTree
Параметры
-
Cake\Datasource\EntityInterface$node - Узел, который нужно удалить из дерева
Возвращаемое значение
Cake\ORM\Entity|falseузел после удаления из дерева или false при ошибке
_scopeисходный код protected
_scope( Cake\ORM\Query $query )
Изменяет переданный запрос так, чтобы он возвращал только ограниченные записи, как определено в конфигурации дерева.
Параметры
-
Cake\ORM\Query$query - Запрос, который нужно изменить
Возвращаемое значение
Cake\ORM\Query\Cake\ORM\Query
_setAsRootисходный код protected
_setAsRoot( Cake\Datasource\EntityInterface $entity )
Обновляет левое и правое поле для переданной сущности, чтобы ее можно было установить в качестве нового корня в дереве. Также изменяет порядок в остальной части дерева, чтобы структура оставалась корректной
Параметры
-
Cake\Datasource\EntityInterface$entity - Сущность, которая нужно установить в качестве нового корня
_setChildrenLevelисходный код protected
_setChildrenLevel( Cake\Datasource\EntityInterface $entity )
Установить уровень для потомков.
Параметры
-
Cake\Datasource\EntityInterface$entity - Сущность, потомки которой нужно обновить.
_setParentисходный код protected
_setParent( Cake\Datasource\EntityInterface $entity , mixed $parent )
Устанавливает правильные значения left и right для переданной сущности, чтобы ее можно было обновить до нового родителя. Также создает пробел в дереве, чтобы перемещение узла можно было выполнить без нарушения структуры.
Параметры
-
Cake\Datasource\EntityInterface$entity - Сущность, которую нужно переместить к новому родителю
- mixed
$parent - Идентификатор родителя, который нужно установить
Исключения
RuntimeExceptionесли родитель, которому нужно установить сущность, недействителен
_syncисходный код protected
_sync( integer $shift , string $dir , string $conditions , boolean $mark false )
Вспомогательная функция, используемая для автоматического изменения значения столбцов left и right на определенную величину, соответствующую переданным условиям
Параметры
- integer
$shift - значение, используемое для изменения столбцов left и right
- string
$dir - Оператор, используемый для сдвига значения (+/-)
- string
$conditions - SQL фрагмент, используемый для сравнения left или right с ним.
- boolean
$markнеобязательный false - устанавливается ли для обновленных значений метка, чтобы они не могли быть изменены последующими вызовами этой функции
_unmarkInternalTreeисходный код protected
_unmarkInternalTree( )
Вспомогательный метод, используемый для инвертирования знака столбцов left и right, которые меньше 0. Они были установлены в отрицательные значения ранее, поэтому их абсолютное значение не изменялось при выполнении других преобразований дерева.
afterSaveисходный код public
afterSave( Cake\Event\Event $event , Cake\Datasource\EntityInterface $entity )
Прослушиватель после сохранения.
Управляет обновлением уровня потомков текущей сохраненной сущности.
Параметры
-
Cake\Event\Event$event - событие beforeSave, которое было запущено
-
Cake\Datasource\EntityInterface$entity - сущность, которая будет сохранена
beforeDeletesource public
beforeDelete( Cake\Event\Event $event , Cake\Datasource\EntityInterface $entity )
Также удаляет узлы в поддереве сущности, подлежащей удалению
Параметры
-
Cake\Event\Event$event - Событие beforeDelete, которое было запущено
-
Cake\Datasource\EntityInterface$entity - Сущность, которая будет сохранена
beforeSavesource public
beforeSave( Cake\Event\Event $event , Cake\Datasource\EntityInterface $entity )
Обработчик перед сохранением. Прозрачно управляет установкой полей lft и rght, если поле parent включено в параметры, которые необходимо сохранить.
Параметры
-
Cake\Event\Event$event - Событие beforeSave, которое было запущено
-
Cake\Datasource\EntityInterface$entity - сущность, которая будет сохранена
Исключения
RuntimeExceptionесли родитель, который нужно установить для узла, недействителен
childCountsource public
childCount( Cake\Datasource\EntityInterface $node , boolean $direct false )
Получить количество дочерних узлов.
Параметры
-
Cake\Datasource\EntityInterface$node - Сущность для подсчета дочерних элементов
- boolean
$directнеобязательно false - указывает, нужно ли подсчитывать все узлы в поддереве или только непосредственных потомков
Возвращает
integerКоличество дочерних узлов.
findChildrensource public
findChildren( Cake\ORM\Query $query , array $options )
Получить дочерние узлы текущей модели
Доступные параметры:
- for: Идентификатор записи для чтения.
- direct: Булево значение, указывает нужно ли вернуть только непосредственных (true), или все (false) потомки, по умолчанию false (все потомки).
Если параметр direct установлен в true, возвращаются только непосредственные потомки (на основе поля parent_id)
Параметры
-
Cake\ORM\Query$query - Запрос.
- array
$options - Массив параметров, как описано выше
Возвращает
Cake\ORM\Query\Cake\ORM\Query
Исключения
InvalidArgumentExceptionЕсли ключ 'for' не передан в $options
findPathsource public
findPath( Cake\ORM\Query $query , array $options )
Пользовательский метод поиска, который может быть использован для возвращения списка узлов от корня до определенного узла в дереве. Этот пользовательский метод поиска требует, чтобы ключ 'for' передавался в параметрах, содержащих идентификатор узла, для которого требуется получить путь.
Параметры
-
Cake\ORM\Query$query - Построенный запрос для изменения
- array
$options - Список параметров запроса
Возвращает
Cake\ORM\Query\Cake\ORM\Query
Исключения
InvalidArgumentExceptionЕсли ключ 'for' отсутствует в параметрах
findTreeListsource public
findTreeList( Cake\ORM\Query $query , array $options )
Получает представление элементов в дереве как плоского списка, где ключи — первичный ключ таблицы, а значения — поле отображения для таблицы. Значения добавляются с префиксом, чтобы визуально указывать относительную глубину в дереве.
Параметры
- keyPath: Путь, разделенный точками, для извлечения поля, которое будет ключом массива, или замыкание для возврата ключа из предоставленной строки.
- valuePath: Путь, разделенный точками, для извлечения поля, которое будет значением массива, или замыкание для возврата значения из предоставленной строки.
- spacer: Строка, используемая в качестве префикса для обозначения глубины в дереве для каждого элемента
Параметры
-
Cake\ORM\Query$query - Запрос.
- array
$options - Массив параметров, как описано выше.
Возвращает
Cake\ORM\Query\Cake\ORM\Query
formatTreeListsource public
formatTreeList( Cake\ORM\Query $query , array $options [] )
Форматирует запрос как плоский список, где ключи — первичный ключ таблицы, а значения — поле отображения для таблицы. Значения добавляются с префиксом, чтобы визуально указывать относительную глубину в дереве.
Параметры
- keyPath: Путь, разделенный точками, для поля, которое будет ключом результирующего массива, или лямбда-выражение для возврата ключа из предоставленной строки.
- valuePath: Путь, разделенный точками, для поля, которое является значением массива, или лямбда-выражение для возврата значения из предоставленной строки.
- spacer: Строка, используемая в качестве префикса для обозначения глубины в дереве для каждого элемента.
Параметры
-
Cake\ORM\Query$query - Объект запроса для форматирования.
- array
$optionsнеобязательно [] - Массив параметров, как описано выше.
Возвращает
Cake\ORM\QueryРасширенный запрос.
getLevelsource public
getLevel( integer|string|Cake\Datasource\EntityInterface $entity )
Возвращает уровень глубины узла в дереве.
Параметры
- целое число|строка|
Cake\Datasource\EntityInterface$entity - Сущность или первичный ключ, для которого нужно получить уровень.
Возвращает
integer|booleanЦелое значение уровня или false, если узел не существует.
initializesource public
initialize( array $config )
Метод хука конструктора.
Параметры
- array
$config - Параметры конфигурации, предоставленные этому поведению.
Переопределяет
Cake\ORM\Behavior::initialize() moveDownsource public
moveDown( Cake\Datasource\EntityInterface $node , integer|boolean $number 1 )
Переупорядочивает узел без изменения родителя.
Если узел является последним потомком или является узлом верхнего уровня без последующего узла, этот метод вернет false.
Параметры
-
Cake\Datasource\EntityInterface$node - Узел для перемещения
- целое число|логическое значение
$numberнеобязательно 1 - Количество позиций для перемещения узла или true для перемещения в последнюю позицию
Возвращает
Cake\ORM\Entity|booleanсущность после перемещения или false при ошибке
Исключения
Cake\Datasource\Exception\RecordNotFoundExceptionКогда узел не был найден
moveUpsource public
moveUp( Cake\Datasource\EntityInterface $node , integer|boolean $number 1 )
Переупорядочивает узел без изменения родителя.
Если узел является первым потомком или является узлом верхнего уровня без предыдущего узла, этот метод вернет false.
Параметры
-
Cake\Datasource\EntityInterface$node - Узел для перемещения
- целое число|логическое значение
$numberнеобязательно 1 - Количество позиций для перемещения узла, или true для перемещения в первую позицию
Возвращает
Cake\ORM\Entity|boolean$node Узел после перемещения или false при ошибке
Исключения
Cake\Datasource\Exception\RecordNotFoundExceptionКогда узел не был найден
recoversource public
recover( )
Восстанавливает значения столбцов lft и right из иерархии, определенной столбцом parent.
removeFromTreesource public
removeFromTree( Cake\Datasource\EntityInterface $node )
Удаляет текущий узел из дерева, размещая его как новый корень и перемещая всех потомков на один уровень выше.
Обратите внимание, что узел не будет удален, а только перемещен из текущей позиции без перемещения его потомков.
Параметры
-
Cake\Datasource\EntityInterface$node - Узел для удаления из дерева
Возвращает
Cake\ORM\Entity|falseузел после удаления из дерева или false при ошибке
Методы, унаследованные от Cake\ORM\Behavior
__constructsource public
__construct( Cake\ORM\Table $table , array $config [] )
Конструктор
Объединяет конфигурацию со значениями по умолчанию и сохраняет результат в свойстве config
Параметры
-
Cake\ORM\Table$table - Таблица, к которой прикреплено данное поведение.
- array
$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массив
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 - True для рекурсивного слияния, 'shallow' для простого слияния, false для перезаписи, по умолчанию 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']);
Параметры
- строка|массив|null
$keyнеобязательно null - Ключ для получения/установки или полный массив конфигураций.
- смешанный тип|null
$valueнеобязательно null - Значение для установки.
- логическое
$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']);
Параметры
- строка|массив
$key - Ключ для установки или полный массив конфигураций.
- смешанный тип|null
$valueнеобязательно null - Значение для установки.
Возвращает
mixed$this Объект сам по себе.
Резюме свойств
Свойства, унаследованные от Cake\ORM\Behavior
$_reflectionCachesource
protected static массив
Кэш отражения методов для поведений.
Хранит отраженные методы + методы поиска по классу. Это предотвращает многократное отражение одного и того же класса в одном процессе.
[]
Свойства, используемые из 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.TreeBehavior.html