Знайомство з Kohana 3

Моделі - це класи, призначені для роботи з інформацією, що передається або запитується контролером. Наприклад, якщо у вас є гостьова книга, то контролер запитує модель останні десять записів; модель їх повертає; контролер передає ці дані виду. Контролер також може за допомогою моделі додати нові записи та оновити чи видалити існуючі.

По суті модель – це маніпулятор даними.

Насамперед ми повинні визначити, що буде даними: XML-стрічка, CSV, JSON, DB чи щось інше? Не буду вас мучити і скажу, що цього разу ми попрацюємо з давнім другом MySQL. Тому наступним кроком стане налаштування підключення до бази даних.

Збережіть файл. Ми тільки-но наказали фреймворку завантажувати модуль бази даних, але він ще не налаштований. Скопіюйте “database.php” з “modules/database/config/” у “application/config/”. Відкрийте файл “application/config/database.php” та відредагуйте його відповідно до ваших налаштувань. Мій виглядає так:

Збережіть файл. Для цієї серії статей я створив базу даних mykohana3, вам бажано зробити те ж саме. Таблицю в базі даних ми створимо за допомогою наступного SQL-коду:

Запустіть його у вашому улюбленому MySQL-клієнті, особисто я віддаю перевагу SQLYog. Як конфігурації підключення до БД, так таблиці я виставив кодування “utf8″. Це знадобиться нам у майбутньому.

Давайте у “application/classes” створимо нову папку “model”. У ній створіть новий файл і помістіть туди:

Збережіть це як “post.php” у “application/classes/model/”. Тепер розберемо код рядково.

Це базовий запит MySQL, який вибирає до десяти записів з бази даних, що сортуються по полю 'id' у порядку зменшення.

Це повертає масив із результатом запиту. Метод “query” у цьому прикладі приймає три параметри. Перший тип запиту, у нас це “select”, тому ми передаємо константу “Database::SELECT”. Також є три інші: “Database::INSERT”, “Database::UPDATE” та “Database::DELETE”. Метод “as_array()” повертає масив з результатами, отже зникає необхідність робити “while($row = mysql_fetch_array())”.

Тепер, коли в моделі з'явився метод, можна почати його використовувати. Відкрийте “ko3.php” у “/application/classes/controller” і додайте до класу наступний код:

Збережіть це як “posts.php” у папці “application/views/pages/”. Цей вид перебирає масив, що передається контролером, і виводить записи з бази даних. Хоча, стоп, у нас у базі даних ще немає статей! Виправимо це такими SQL-запитами:

Давайте тепер реалізуємо додавання нових даних до бази. Відкрийте нашу модель ("application/classes/model/post.php") і додайте до класу наступне:

Вище знаходиться досить простий запит типу INSERT, але що таке $this->_db>escape()? Цей метод обрамить ваші рядкові змінні лапками і очистить їх від сміття. Збережіть це та поверніться до “posts.php” з “application/views/pages”. Замініть його вміст цим:

Збережіть файл та відкрийте контролер ("application/classes/controller/ko3.php"). Додамо до нього новий метод:

Цей код є проміжною ланкою між action_posts і моделлю, він служить для безпосереднього збереження запису. Повернімося до методу “action_posts” і наведемо його до такого виду:

Збережіть це та перезавантажте браузер. Внизу має з'явитися форма страшного вигляду. Введіть щось та натисніть «Надіслати». Якщо ви заповнили обидва поля, то ваш запис має з'явитися нагоріразом із написом “Saved”. В іншому випадку з'явиться повідомлення про помилку.

Перш ніж закінчити ознайомлення з моделями, хочу показати, як ще можна було робити додавання запису до бази даних. Існує кілька способів, але я зверну увагу лише на так званий Query Builder. MySQL-запит у методі addPost() з ним виглядав би так:

Query Builder зручний тим, що дозволяє перемикатися між різними типами баз даних (з MySQL в Oracle, і т.п.)

Оновлення записів я в моделі не реалізував, тому можете розглядати це як домашнє завдання.

Хардкорна конфа за С++. Ми запрошуємо лише профі.