Home PageКаталог Изменения НовыеКомментарии Пользователи Регистрация
CakePHP: Manual/Developing/Behaviors/UsingBehaviors ...

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


Поведения подключаются к модели с помощью переменной класса модели $actsAs:


<?php

class Category extends AppModel {
    var 
$name   'Category';
    var 
$actsAs = array('Tree');
}

?>


Этот пример показывает, как модель Category будет управлять структурой дерева, используя поведение TreeBehavior. После того, как поведение определено, вы можете использовать методы, добавленные поведением, также, как оригинальные методы модели:


<?
// Установка ID
$this->Category->id 42;

// Использование метода поведения children():
$kids $this->Category->children();
?>


Некоторые поведения могут требовать или позволять делать установки, когда поведение подключается к модели. Здесь мы сообщаем поведению TreeBehavior имена полей “left” и “right” в таблице базы данных:


<?php

class Category extends AppModel {
    var 
$name   'Category';
    var 
$actsAs = array('Tree' => array(
        
'left'  => 'left_node',
        
'right' => 'right_node'
    
));
}

?>


Мы также можем подключить несколько поведений к модели. Почему, например, наша модель Category должна вести себя только как дерево, она также может нуждаться в поддержке интернационализации:


<?php

class Category extends AppModel {
    var 
$name   'Category';
    var 
$actsAs = array(
        
'Tree' => array(
          
'left'  => 'left_node',
          
'right' => 'right_node'
        
),
        
'Translate'
    
);
}

?>


Итак, мы добавляли поведения к моделям, используя переменную класса модели. Это означает, что наши поведения будут прикреплены к моделям на протяжении всего времени существования модели. Однако, нам может потребоваться «отсоединение» поведений от нашей модели в момент выполнения программы. Допустим, нам необходимо, чтобы наша предыдущая модель Category, которая действует как Tree и Translate, перестала действовать, как модель Translate:


<?
// Отсоединение поведения от нашей модели:
$this->Category->Behaviors->detach('Translate');
?>


После этого действия наша модель Category перестанет вести себя как модель Translate. Вместо отключения поведения, возможно, нам нужно будет просто запретить поведению Translate действовать на обычные операции модели: find, save, и т.п. В действительности, мы заботимся о запрещении поведению действовать на колбэки модели. Вместо отключения поведения мы говорим нашей модели остановить информирование поведения Translate об этих колбэках:


<?
// Запрещаем поведению управлять колбэками модели
$this->Category->Behaviors->disable('Translate');

?>


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


<?
// Если наше поведение не управляет колбэками модели
if (!$this->Category->Behaviors->enabled('Translate')) {
    
// говорим ему начать управлять колбэками
    
$this->Category->Behaviors->enable('Translate');
}

?>


Также, как мы можем полностью отключить поведение от модели в процессе выполнения программы, мы можем и подключить новые поведения. Допустим, что наша модель Category должна начать вести себя как модель Christmas, но только в Рождество:


<?
// Если сегодня 25 декабря
if (date('m/d') == '12/25') {
    
// Наша модель должна вести себя как модель Christmas
    
$this->Category->Behaviors->attach('Christmas');
}
?>


Мы также можем использовать метод attach для перезаписи настроек поведения:


<?
// Мы изменим одну установку по сравнению, с уже подключенным поведением
$this->Category->Behaviors->attach('Tree', array('left' => 'new_left_node'));
?>


Существует метод получения списка подключенных к модели поведений. Если мы передадим методу имя поведения, то он сообщит нам подключено ли это поведение к модели, иначе он вернет нам список всех подключенных поведений:


<?
// Если поведение Translate не подключено
if (!$this->Category->Behaviors->attached('Translate')) {
    
// Получаем список всех поведений, подключенных к модели
    
$behaviors $this->Category->Behaviors->attached();
}
?>


<< Поведения | Создание пользовательских поведений >>


 
Комментарии
В большинстве случаев выложенный материал кажется понятным. Но я думаю, что просто пример вызова метода недостаточно для полного понимания теории. Неплохо бы было показывать применение метода в куске рабочего кода, для большей наглядности и ясности!!!
98-42-178-94.pool.ukrtel.net (2009-11-14 14:29:59)
Это всего лишь перевод мануала.
Комментируй оригинал, если хочешь, чтоб к тебе прислушались.
217.197.229.58 (2010-09-01 10:05:49)
да тут нечего комментировать, это читается один раз, это всего-лишь справка.
ip-84-133.dnepro.net (2011-12-07 19:38:58)
Добавить комментарий:

Файлы [Скрыть файлы/форму]