Настройки зависят от поведения на Cake - PullRequest
0 голосов
/ 11 августа 2010

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

class Airplane extends AppModel {
    var $actsAs = array('Flying');
}

class FlyingBehavior extends ModelBehavior {
    function flightTime(&$Model, $distance) {
        return $distance / $this->speed;
    }
}

Изначально я думал, что установлю его как

class Airplane extends AppModel {
    var $actsAs = array('Flying' => 
                      array('speed' => SOMENUM)
                  );
}

class FlyingBehavior extends ModelBehavior {
    function setup(&$Model, $settings) {
        $this->speed = $settings['speed'];
    }

    function flightTime(&$Model, $distance) {
        return $distance / $this->speed;
    }
}

Но я не знаю, как это сделать, потому что мне нужно получить speedстолбец из каждой Airplane записи.Как мне это сделать?

Ответы [ 2 ]

1 голос
/ 11 августа 2010

В вашем flightTime() методе у вас есть доступ к вашей исходной модели. Вы можете вызвать любое свойство или метод в этой модели (или любой из его супер / родительских классов) как $Model->find( ... ) или еще много чего. Вы можете использовать эту технику для извлечения любой информации, специфичной для модели, но убедитесь, что одна и та же информация доступна для всех моделей, к которым привязано поведение (или, по крайней мере, проверьте, доступно ли свойство / метод).

0 голосов
/ 15 августа 2010

Я решил проблему, добавив код к обратному вызову afterFind(); установка свойства в модели.

Тогда мне просто нужно получить к нему доступ через $Model->property из Поведения. Это должно быть возможно без необходимости вмешиваться в afterFind(), но, к сожалению, я не нашел способ сделать это.

...