2010-02-17 2 views
0

Сейчас у меня есть несколько методов в моей модели, которые все извлекают один и тот же объект в начале (родительский класс модели). Я хотел бы сделать это автоматически и выполнить код заранее.CakePHP: Выполнить код перед некоторыми методами модели

Я хотел бы сказать: «Выполняйте fetchParent() перед вызовом методов getParentId(), getParentTable() и mayChange()».

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

ответ

0

В зависимости от значения «некоторых методов» вы можете использовать собственные обратные вызовы Cake. Больше на тех, которые на http://book.cakephp.org/view/76/Callback-Methods. Однако представляется более вероятным, что вы хотите использовать общие функции для пользовательских методов. Если это так, то то, что я сделал, это создание пользовательских обратных вызовов. Для этого создайте пользовательский обратный вызов в желаемой модели/с. Затем, в AppModel::your_method(), проверьте наличие имени этого метода и, если оно существует, выполните его.

Вот некоторые примеры кода, которые я написал в прошлом:

# In AppModel::your_method() 
if (method_exists ($model, 'your_custom_callback')) { 
    $model->your_custom_callback ($model); 
} 

# In YourModel 
public function your_custom_callback ($model) { 
    /** Your custom code */ 
} 

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

+0

Благодарим вас за ответ, но я хочу настроить методы, которые должны выполнять обратные вызовы * вне этих методов *. Я добавил детали к моему вопросу. – blinry

+0

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

Смежные вопросы