CakePHP Articles

Автор Володимир Лучанінов

Я люблю виносити обробку даних у моделі. При цьому у мене часто виходять моделі зі схожими функціями, як в одному проекті, так і в різних. А мене дуже пригнічує, коли треба писати один і той же код по кілька разів, а від копіювання коду мене просто пересмикує, тому що я вже бачу як через півроку себе проклинатиму. До CakePHP я у таких випадках просто створював спільного нащадка і там реалізував загальну функціональність. Недолік цього методу - це те, що в PHP можна успадковувати лише один клас.

На щастя, розробники CakePHP придумали як зручніше виносити однакову функціональність із моделей. Ця можливість з'явилася в Cake PHP? 1.2 і називається behaviors.

Візьмемо нашу модель Word. У мене часто бувають такі таблиці, які складаються з id та name. Я покажу, як зробити так, щоб до інших моделей такого типу можна було застосовувати загальну функціональність. Але при цьому ми можемо вказати в кожній конкретній моделі, які підходи до неї підключати. Найзручніше, що можна підключати їх кілька, а не лише одну.

Модель виглядала так

Із застосуванням behavior цей же клас виглядатиме так

І все. Через кому можна вказати кілька behaviors. Якщо потрібно передати налаштування в behavior, то треба писати

Самі behaviors знаходяться у app/models/behaviors. Для нашої моделі це app/models/behaviors/name_list.php

У методі setup ми налаштовуємо behavior. $config передаються налаштування, які можна вказати в моделі. У всіх методах додається перший параметр $model. Якщо ви переносите методи з моделі, то треба не забути всі $this поміняти на $model.

Як бачите, створювати behaviors дуже просто. Особливо,якщо ми заздалегідь створили тест і можемо автоматично переконатися, що все працює.