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 дуже просто. Особливо,якщо ми заздалегідь створили тест і можемо автоматично переконатися, що все працює.