Spec-Zone.ru › CakePHP 3.3

Класс TreeBehavior

Делает таблицу, к которой он прикреплён, похожей на вложенный набор и предоставляет методы для управления и извлечения информации из полученной иерархической структуры.

Таблицы, к которым прикреплено это поведение, должны иметь столбец, ссылающийся на родительскую строку, и ещё два числовых столбца (lft и rght), где неявный порядок будет кэшироваться.

Для получения дополнительной информации о том, что такое вложенный набор и как он работает, обратитесь к http://www.sitepoint.com/hierarchical-data-database-2/

Cake\ORM\Behavior implements Cake\Event\EventListenerInterface uses Cake\Core\InstanceConfigTrait
Расширенный Cake\ORM\Behavior\TreeBehavior
Пространство имён: Cake\ORM\Behavior
Расположение: ORM/Behavior/TreeBehavior.php

Краткое описание свойств

  • $_defaultConfig protected
    array
    Значение конфигурации по умолчанию
  • $_primaryKey protected
    string
    Кэшированная копия первого столбца в первичном ключе таблицы.

Унаследованные свойства

  • _reflectionCache, _table _config, _configInitialized

Краткое описание методов

  • _ensureFields() protected

    Обеспечивает, что предоставленный сущность содержит непустые значения для полей left и right

  • _getMax() protected
    Возвращает максимальное значение индекса в таблице.
  • _getNode() protected
    Возвращает один узел из дерева по его первичному ключу
  • _getPrimaryKey() protected
    Возвращает строку, представляющую первичный ключ присоединённой таблицы
  • _moveDown() protected
    Вспомогательная функция, используемая с фактическим кодом для moveDown
  • _moveUp() protected
    Вспомогательная функция, используемая с фактическим кодом для moveUp
  • _recoverTree() protected
    Рекурсивный метод, используемый для восстановления одного уровня дерева
  • _removeFromTree() protected
    Вспомогательная функция, содержащая фактический код для removeFromTree
  • _scope() protected

    Изменяет переданный запрос, чтобы он возвращал только отфильтрованные записи, как определено в конфигурации дерева.

  • _setAsRoot() protected

    Обновляет поля left и right для переданной сущности, чтобы её можно было установить в качестве нового корня в дереве. Также изменяет порядок в остальной части дерева, чтобы структура оставалась корректной

  • _setChildrenLevel() protected
    Устанавливает уровень для потомков.
  • _setParent() protected

    Устанавливает правильные значения left и right для переданной сущности, чтобы её можно было обновить до нового родителя. Также делает отверстие в дереве, чтобы перемещение узла можно было выполнить без повреждения структуры.

  • _sync() protected

    Вспомогательная функция, используемая для автоматического изменения значения полей left и right на определённую величину, соответствующую переданным условиям

  • _unmarkInternalTree() protected

    Вспомогательный метод, используемый для инвертирования знака полей left и right, которые меньше 0. Они были установлены в отрицательные значения ранее, чтобы их абсолютное значение не менялось при выполнении других преобразований дерева.

  • afterSave() public
    Обработчик после сохранения.
  • beforeDelete() public
    Также удаляет узлы в поддереве удаляемой сущности
  • beforeSave() public

    Обработчик перед сохранением. Прозрачно управляет установкой полей lft и rght, если поле parent включено в параметры, которые нужно сохранить.

  • childCount() public
    Получить количество дочерних узлов.
  • findChildren() public
    Получить дочерние узлы текущей модели
  • findPath() public

    Пользовательский метод поиска, который можно использовать для возвращения списка узлов от корня до определённого узла в дереве. Для этого пользовательского метода поиска необходимо передать ключ 'for' в параметрах, содержащих идентификатор узла, чтобы получить его путь.

  • findTreeList() public

    Получает представление элементов в дереве в виде плоского списка, где ключи — первичный ключ таблицы, а значения — поле отображения таблицы. Значения имеют префиксы, чтобы визуально указать относительную глубину в дереве.

  • formatTreeList() public

    Форматирует запрос в плоский список, где ключи — первичный ключ таблицы, а значения — поле отображения таблицы. Значения имеют префиксы, чтобы визуально указать относительную глубину в дереве.

  • getLevel() public
    Возвращает уровень глубины узла в дереве.
  • initialize() public
    Метод начального блока конструктора.
  • moveDown() public
    Переупорядочивает узел без изменения родителя.
  • moveUp() public
    Переупорядочивает узел без изменения родителя.
  • recover() public

    Восстанавливает значения полей lft и right из иерархии, определённой столбцом parent.

  • removeFromTree() public

    Удаляет текущий узел из дерева, размещая его как новый корень и перемещая всех детей на уровень выше.

Подробное описание методов

_ensureFields()исходный код protected

_ensureFields( Cake\Datasource\EntityInterface $entity )

Обеспечивает, что предоставленная сущность содержит непустые значения для полей left и right

Параметры

Cake\Datasource\EntityInterface $entity
Сущность, для которой нужно проверить поля

_getMax()исходный код protected

_getMax( )

Возвращает максимальное значение индекса в таблице.

Возвращает

целое число

_getNode()исходный код protected

_getNode( mixed $id )

Возвращает один узел из дерева по его первичному ключу

Параметры

смешанный $id
Идентификатор записи.

Возвращает

Cake\ORM\Entity

Исключения

Cake\Datasource\Exception\RecordNotFoundException
Если узел не найден

_getPrimaryKey()исходный код protected

_getPrimaryKey( )

Возвращает строку, представляющую первичный ключ присоединённой таблицы

Возвращает

строка

_moveDown()исходный код protected

_moveDown( Cake\Datasource\EntityInterface $node , integer|boolean $number )

Вспомогательная функция, используемая с фактическим кодом для moveDown

Параметры

Cake\Datasource\EntityInterface $node
Узел, который нужно переместить
целое число|логическое $number
На сколько позиций переместить узел или true для перемещения в последнюю позицию

Возвращает

Cake\ORM\Entity|логическое
$node Узел после перемещения или false при ошибке

Исключения

Cake\Datasource\Exception\RecordNotFoundException
Если узел не найден
END_OF_DOCUMENT_MARKER

_moveUp()source 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()source protected

_recoverTree( integer $counter 0 , mixed $parentId null , integer $level -1 )

Рекурсивный метод, используемый для восстановления одного уровня дерева

Параметры

integer $counter опционально 0
Последнее значение левого столбца, которое было назначено
mixed $parentId опционально null
Идентификатор родителя уровня, который нужно восстановить
integer $level опционально -1
Уровень узла

Возвращает

integer
Следующее значение для использования в левом столбце

_removeFromTree()source protected

_removeFromTree( Cake\Datasource\EntityInterface $node )

Вспомогательная функция, содержащая фактический код для removeFromTree

Параметры

Cake\Datasource\EntityInterface $node
Узел, который нужно удалить из дерева

Возвращает

Cake\ORM\Entity|false

Узел после удаления из дерева или false при ошибке


_scope()source protected

_scope( Cake\ORM\Query $query )

Изменяет переданный запрос, чтобы он возвращал только отфильтрованные записи, как определено в настройках дерева.

Параметры

Cake\ORM\Query $query
Запрос для модификации

Возвращает

Cake\ORM\Query

_setAsRoot()source protected

_setAsRoot( Cake\Datasource\EntityInterface $entity )

Обновляет левое и правое значения для переданной сущности, чтобы ее можно было установить как новый корень в дереве. Также изменяет порядок в остальной части дерева, чтобы структура оставалась корректной.

Параметры

Cake\Datasource\EntityInterface $entity
Сущность, которая должна быть установлена как новый корень

_setChildrenLevel()source protected

_setChildrenLevel( Cake\Datasource\EntityInterface $entity )

Устанавливает уровень для потомков.

Параметры

Cake\Datasource\EntityInterface $entity
Сущность, потомки которой необходимо обновить.

_setParent()source protected

_setParent( Cake\Datasource\EntityInterface $entity , mixed $parent )

Устанавливает правильные значения левого и правого столбцов для переданной сущности, чтобы ее можно было обновить до нового родителя. Также создает пробел в дереве, чтобы перемещение узла можно было выполнить без нарушения структуры.

Параметры

Cake\Datasource\EntityInterface $entity
Сущность, которую нужно переместить к новому родителю
mixed $parent
Идентификатор родителя, который нужно установить

Выбрасывает

RuntimeException
Если родитель, который нужно установить для сущности, недействителен

_sync()source protected

_sync( integer $shift , string $dir , string $conditions , boolean $mark false )

Вспомогательная функция, используемая для автоматического изменения значения столбцов слева и справа на определенную величину, соответствующую переданным условиям.

Параметры

integer $shift
Значение, используемое для обработки столбцов слева и справа
string $dir
Оператор, используемый для сдвига значения (+/-)
string $conditions

SQL-фрагмент, используемый для сравнения слева или справа с ним.

boolean $mark опционально false

указывает, нужно ли отмечать обновленные значения, чтобы они не могли быть изменены последующими вызовами этой функции.

_unmarkInternalTree()source protected

_unmarkInternalTree( )

Вспомогательный метод, используемый для изменения знака столбцов слева и справа, которые меньше 0. Они были установлены в отрицательные значения ранее, чтобы их абсолютное значение не изменялось при выполнении других преобразований дерева.

afterSave()source public

afterSave( Cake\Event\Event $event , Cake\Datasource\EntityInterface $entity )

Обработчик после сохранения.

Управляет обновлением уровня потомков текущей сохраненной сущности.

Параметры

Cake\Event\Event $event
Событие afterSave, которое было запущено
Cake\Datasource\EntityInterface $entity
Сущность, которая будет сохранена

beforeDelete()source public

beforeDelete( Cake\Event\Event $event , Cake\Datasource\EntityInterface $entity )

Также удаляет узлы в поддереве сущности, подлежащей удалению

Параметры

Cake\Event\Event $event
Событие beforeDelete, которое было запущено
Cake\Datasource\EntityInterface $entity
Сущность, которая будет сохранена

beforeSave()source public

beforeSave( Cake\Event\Event $event , Cake\Datasource\EntityInterface $entity )

Обработчик перед сохранением. Прозрачно управляет установкой полей lft и rght, если поле parent включено в параметры, которые нужно сохранить.

Параметры

Cake\Event\Event $event
Событие beforeSave, которое было запущено
Cake\Datasource\EntityInterface $entity
Сущность, которая будет сохранена

Выбрасывает

RuntimeException
Если родитель, который нужно установить для узла, недействителен

childCount()source public

childCount( Cake\Datasource\EntityInterface $node , boolean $direct false )

Получить количество дочерних узлов.

Параметры

Cake\Datasource\EntityInterface $node
Сущность, для которой нужно посчитать дочерние узлы
boolean $direct опционально false

Учитывать ли все узлы в поддереве или только прямых потомков

Возвращает

integer
Количество дочерних узлов.

findChildren()source 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

Выбрасывает

InvalidArgumentException
Если ключ 'for' не передан в $options

findPath()source public

findPath( Cake\ORM\Query $query , array $options )

Специальный метод поиска, который можно использовать для возврата списка узлов от корня до определенного узла в дереве. Для использования этого метода поиска необходимо передать ключ 'for' в параметрах, содержащих идентификатор узла, для которого нужно получить путь.

Параметры

Cake\ORM\Query $query
Сформированный запрос для модификации
array $options
Список параметров для запроса

Возвращает

Cake\ORM\Query

Выбрасывает

InvalidArgumentException
Если ключ 'for' отсутствует в параметрах

findTreeList()source public

findTreeList( Cake\ORM\Query $query , array $options )

Получает представление элементов в дереве в виде плоского списка, где ключи — первичные ключи таблицы, а значения — поля отображения таблицы. Значения добавляются префиксы для визуального обозначения относительной глубины в дереве.

Параметры

  • keyPath: Путь с точкой для извлечения поля, используемого в качестве ключа массива, или замыкание для возврата ключа из предоставленной строки.
  • valuePath: Путь с точкой для извлечения поля, используемого в качестве значения массива, или замыкание для возврата значения из предоставленной строки.
  • spacer: Строка, используемая в качестве префикса для обозначения глубины в дереве для каждого элемента

Параметры

Cake\ORM\Query $query
Запрос.
массив $options
Массив параметров, как описано выше.

Возвращает

Cake\ORM\Query

formatTreeList()source public

formatTreeList( Cake\ORM\Query $query , array $options [] )

Форматирует запрос как плоский список, где ключи — первичные ключи таблицы, а значения — поля отображения таблицы. Значения добавляются префиксы для визуального обозначения относительной глубины в дереве.

Параметры

  • keyPath: Путь с точкой к полю, которое будет ключом результирующего массива, или замыкание для возврата ключа из предоставленной строки.
  • valuePath: Путь с точкой к полю, которое является значением массива, или замыкание для возврата значения из предоставленной строки.
  • spacer: Строка, используемая в качестве префикса для обозначения глубины в дереве для каждого элемента.

Параметры

Cake\ORM\Query $query
Объект запроса для форматирования.
массив $options необязательно []
Массив параметров, как описано выше.

Возвращает

Cake\ORM\Query
Расширенный запрос.

getLevel()source public

getLevel( integer|string|Cake\Datasource\EntityInterface $entity )

Возвращает уровень глубины узла в дереве.

Параметры

целое число|строка|Cake\Datasource\EntityInterface $entity
Сущность или первичный ключ, для которого нужно получить уровень.

Возвращает

целое число|логическое значение
Целое значение уровня или ложь, если узел не существует.

initialize()source public

initialize( array $config )

Метод-обработчик конструктора.

Параметры

массив $config
Параметры конфигурации, предоставленные этому поведению.

Переопределяет

Cake\ORM\Behavior::initialize()

moveDown()source public

moveDown( Cake\Datasource\EntityInterface $node , integer|boolean $number 1 )

Изменяет порядок узла без изменения родителя.

Если узел является последним дочерним элементом или является узлом верхнего уровня без последующего узла, этот метод вернет false

Параметры

Cake\Datasource\EntityInterface $node
Узел, который нужно переместить
целое число|логическое значение $number необязательно 1
Количество позиций для перемещения узла или true для перемещения в последнюю позицию

Возвращает

Cake\ORM\Entity|логическое значение
сущность после перемещения или false при ошибке

Выбрасывает

Cake\Datasource\Exception\RecordNotFoundException
Когда узел не был найден

moveUp()source public

moveUp( Cake\Datasource\EntityInterface $node , integer|boolean $number 1 )

Изменяет порядок узла без изменения его родителя.

Если узел является первым дочерним элементом или является узлом верхнего уровня без предыдущего узла, этот метод вернет false

Параметры

Cake\Datasource\EntityInterface $node
Узел, который нужно переместить
целое число|логическое значение $number необязательно 1
Количество позиций для перемещения узла, или true для перемещения в первую позицию

Возвращает

Cake\ORM\Entity|логическое значение
$node Узел после перемещения или false при ошибке

Выбрасывает

Cake\Datasource\Exception\RecordNotFoundException
Когда узел не был найден

recover()source public

recover( )

Восстанавливает значения столбцов lft и right из иерархии, определенной столбцом родителя.

removeFromTree()source public

removeFromTree( Cake\Datasource\EntityInterface $node )

Удаляет текущий узел из дерева, размещая его как новый корень и перемещая всех дочерних элементов на уровень выше.

Обратите внимание, что узел не будет удален, а только перемещен из текущего положения без перемещения его дочерних элементов вместе с ним.

Параметры

Cake\Datasource\EntityInterface $node
Узел, который нужно удалить из дерева

Возвращает

Cake\ORM\Entity|false

Узел после удаления из дерева или false при ошибке


Методы, унаследованные от Cake\ORM\Behavior

__construct()source public

__construct( Cake\ORM\Table $table , array $config [] )

Конструктор

Объединяет конфигурацию с параметрами по умолчанию и сохраняет в свойстве config

Параметры

Cake\ORM\Table $table
Таблица, к которой подключено это поведение.
массив $config необязательно []
Конфигурация для данного поведения.

_reflectionCache()source protected

_reflectionCache( )

Получает реализованные этим поведением методы

Использует метод implementedEvents() для исключения методов обратного вызова. Методы, начинающиеся с _ будут пропущены, как и методы, объявленные в Cake\ORM\Behavior

Возвращает

массив

_resolveMethodAliases()source protected

_resolveMethodAliases( string $key , array $defaults , array $config )

Удаляет алиасированные методы, которые в противном случае были бы дублированы конфигурацией пользователя.

Параметры

строка $key
Ключ для фильтрации.
массив $defaults
Определения методов по умолчанию.
массив $config
Настроенные определения методов.

Возвращает

массив
Список конфигурации без дублирования.

implementedEvents()source public

implementedEvents( )

Получает обратные вызовы модели, которые интересуют данное поведение.

Определяя один из методов обратного вызова, предполагается, что поведение заинтересовано в соответствующем событии.

Переопределите этот метод, если вам нужно добавить обработчики событий нестандартных методов. Или если вы хотите, чтобы ваше поведение слушало нестандартные события.

Возвращает

массив

Реализация

Cake\Event\EventListenerInterface::implementedEvents()

implementedFinders()source public

implementedFinders( )

implementedFinders

Предоставляет отображение алиас->имя_метода для наборов методов поиска, реализованных поведением. Пример:

[
   'this' => 'findThis',
   'alias' => 'findMethodName'
 ]

С этим примером вызов $Table->find('this') вызовет $Behavior->findThis(), а вызов $Table->find('alias') вызовет $Behavior->findMethodName()

Рекомендуется, но не обязательно, определять implementedFinders в свойстве config дочерних классов, чтобы не было необходимости использовать рефлексию для получения списка доступных методов. См. примеры основных поведений

Возвращает

массив

implementedMethods()source public

implementedMethods( )

implementedMethods

Предоставляет отображение алиас->имя_метода для реализованных методов поведения. Пример:

[
   'method' => 'method',
   'aliasedmethod' => 'somethingElse'
 ]

С этим примером вызов $Table->method() вызовет $Behavior->method(), а вызов $Table->aliasedmethod() вызовет $Behavior->somethingElse()

Рекомендуется, но не обязательно, определять implementedFinders в свойстве config дочерних классов, чтобы не было необходимости использовать рефлексию для получения списка доступных методов. См. примеры основных поведений

Возвращает

массив

verifyConfig()source public

verifyConfig( )

verifyConfig

Проверяет, что реализованные ключи содержат значения, указывающие на вызываемые функции.

Выбрасывает

Cake\Core\Exception\Exception
если конфигурация неверна

Методы, используемые из Cake\Core\InstanceConfigTrait

_configDelete()source protected

_configDelete( string $key )

Удалить один ключ конфигурации

Параметры

строка $key
Ключ для удаления.

Исключения

Cake\Core\Exception\Exception
при попытке перезаписать существующую конфигурацию

_configRead()source protected

_configRead( string|null $key )

Прочитать переменную конфигурации

Параметры

строка|null $key
Ключ для чтения.

Возвращает

смешанный

_configWrite()source protected

_configWrite( string|array $key , mixed $value , boolean|string $merge false )

Записать переменную конфигурации

Параметры

строка|массив $key
Ключ для записи.
смешанный $value
Значение для записи.
булево|строка $merge необязательно false

Истина для рекурсивного слияния, 'shallow' для простого слияния, ложь для перезаписи, по умолчанию ложь.

Исключения

Cake\Core\Exception\Exception
при попытке перезаписи существующей конфигурации

config()source 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
Выполнять рекурсивное слияние или перезаписывать существующую конфигурацию, по умолчанию истинно.

Возвращает

смешанный
Значение конфигурации, которое читается, или сам объект при операциях записи.

Исключения

Cake\Core\Exception\Exception
При попытке установить недопустимый ключ.

configShallow()source 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
Значение для установки.

Возвращает


$this Объект сам по себе.

Подробное описание свойств

$_defaultConfigsource

protected массив

Значения по умолчанию для конфигурации

Они объединяются с пользователем конфигурацией при использовании поведения.

[
    'implementedFinders' => [
        'path' => 'findPath',
        'children' => 'findChildren',
        'treeList' => 'findTreeList',
    ],
    'implementedMethods' => [
        'childCount' => 'childCount',
        'moveUp' => 'moveUp',
        'moveDown' => 'moveDown',
        'recover' => 'recover',
        'removeFromTree' => 'removeFromTree',
        'getLevel' => 'getLevel',
        'formatTreeList' => 'formatTreeList',
    ],
    'parent' => 'parent_id',
    'left' => 'lft',
    'right' => 'rght',
    'scope' => null,
    'level' => null,
    'recoverOrder' => null,
]

$_primaryKeysource

protected строка

Кэшированная копия первого столбца первичного ключа таблицы.

© 2005–2017 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.
https://api.cakephp.org/3.3/class-Cake.ORM.Behavior.TreeBehavior.html

Spec-Zone.ru

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