Spec-Zone.ru › CakePHP 3.7

Дерево поведения

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

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

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

Cake\ORM\Behavior реализует Cake\Event\EventListenerInterface использует Cake\Core\InstanceConfigTrait
Extended by 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

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

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

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

  • _sync() protected

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

  • _unmarkInternalTree() protected

    Вспомогательный метод, используемый для инвертирования знака левого и правого столбцов, которые меньше 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()source protected

_ensureFields( Cake\Datasource\EntityInterface $entity )

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

Параметры

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

_getMax()source protected

_getMax( )

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

Возвращает

целое число

_getNode()source protected

_getNode( mixed $id )

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

Параметры

mixed $id
Идентификатор записи.

Возвращает

Cake\Datasource\EntityInterface

Исключение

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

_getPrimaryKey()source protected

_getPrimaryKey( )

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

Возвращает

строка
END_OF_DOCUMENT_MARKER

_moveDown()source protected

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

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

Параметры

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

Возвращает

Cake\Datasource\EntityInterface|boolean
$node Узел после перемещения или false при ошибке

Вызывает

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

_moveUp()source protected

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

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

Параметры

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

Возвращает

Cake\Datasource\EntityInterface|boolean
$node Узел после перемещения или false при ошибке

Вызывает

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

_recoverTree()source protected

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

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

Параметры

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

Возвращает

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

_removeFromTree()source protected

_removeFromTree( Cake\Datasource\EntityInterface $node )

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

Параметры

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

Возвращает

Cake\Datasource\EntityInterface|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 optional false

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

_unmarkInternalTree()source protected

_unmarkInternalTree( )

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

afterSave()source public

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

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

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

Параметры

Cake\Event\Event $event
Событие после сохранения, которое было вызвано
Cake\Datasource\EntityInterface $entity
Объект, который будет сохранён

beforeDelete()source public

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

Также удаляет узлы в поддереве объекта, который будет удалён

Параметры

Cake\Event\Event $event
Событие перед удалением, которое было вызвано
Cake\Datasource\EntityInterface $entity
Объект, который будет сохранён

beforeSave()source public

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

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

Параметры

Cake\Event\Event $event
Событие перед сохранением, которое было вызвано
Cake\Datasource\EntityInterface $entity
Объект, который будет сохранён

Вызывает

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

childCount()source public

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

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

Параметры

Cake\Datasource\EntityInterface $node
Объект, для которого нужно посчитать количество дочерних узлов
boolean $direct optional 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
Изменяемый запрос
массив $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
Сущность или первичный ключ, для которого необходимо получить уровень.

Возвращает

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

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\Datasource\EntityInterface|логическое значение
Сущность после перемещения или 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\Datasource\EntityInterface|логическое значение
$node Узел после перемещения или false при ошибке

Исключения

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

recover()source public

recover( )

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

removeFromTree()source public

removeFromTree( Cake\Datasource\EntityInterface $node )

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

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

Параметры

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

Возвращает

Cake\Datasource\EntityInterface|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

Возвращает

массив

Исключения

ReflectionException

_resolveMethodAliases()source protected

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

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

Параметры

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

Возвращает

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

getTable()source public

getTable( )

Получение экземпляра таблицы, к которой привязано данное поведение.

Возвращает

Cake\ORM\Table
Связанный экземпляр таблицы.

implementedEvents()source public

implementedEvents( )

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

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

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

Возвращает

массив

Реализация

Cake\Event\EventListenerInterface::implementedEvents()

implementedFinders()source public

implementedFinders( )

implementedFinders

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

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

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

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

Возвращает

массив

Выбрасывает

ReflectionException

implementedMethods()source public

implementedMethods( )

implementedMethods

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

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

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

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

Возвращает

массив

Выбрасывает

ReflectionException

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']);

Устарело

3.4.0 используйте setConfig()/getConfig() вместо этого.

Параметры

строка|массив|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->configShallow('key', $value);

Установка вложенного значения:

$this->configShallow('some.nested.key', $value);

Обновление нескольких настроек конфигурации одновременно:

$this->configShallow(['one' => 'value', 'another' => 'value']);

Параметры

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

Возвращает


$this

getConfig()source public

getConfig( string|null $key = null , mixed $default = null )

Возвращает конфигурацию.

Использование

Чтение всей конфигурации:

$this->getConfig();

Чтение определенного значения:

$this->getConfig('key');

Чтение вложенного значения:

$this->getConfig('some.nested.key');

Чтение со значением по умолчанию:

$this->getConfig('some-key', 'default-value');

Параметры

строка|null $key необязательно null
Ключ для получения или null для всей конфигурации.
смешанный тип $default необязательно null
Возвращаемое значение, если ключ не существует.

Возвращает

смешанный тип
Значение конфигурации, считываемое.

setConfig()source public

setConfig( string|array $key , mixed|null $value = null , boolean $merge = true )

Устанавливает конфигурацию.

Использование

Установка определенного значения:

$this->setConfig('key', $value);

Установка вложенного значения:

$this->setConfig('some.nested.key', $value);

Обновление нескольких настроек конфигурации одновременно:

$this->setConfig(['one' => 'value', 'another' => 'value']);

Параметры

строка|массив $key
Ключ для установки или полный массив настроек.
смешанный тип|null $value необязательно null
Значение для установки.
логический тип $merge необязательно true
Рекурсивное слияние или перезапись существующей конфигурации, по умолчанию истина.

Возвращает


$this

Выбрасывает

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

Подробности свойств

$_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–present 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.7/class-Cake.ORM.Behavior.TreeBehavior.html

Spec-Zone.ru

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