Порівняння codeigniter і kohana, Опейкін Андрій

Раунд 1 MVC.

Кохана

На відміну від Codeigniter, Kohana вимагає що б у найменування класу контролера був постфікс «_Controller », не вказавши який, при зверненні до контролера отримуємо повідомлення про помилку «Fatalerror :Cannotredeclareclass ».

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

Для позначення методів, доступних тільки всередині контролера (не доступних із сайту), Codeigniter пропонує використовувати префікс «_ » у назві методу.

Kohana пропонує два варіанти вирішення цієї проблеми (один з яких найбільш інтуїтивний, на мою думку), а саме:

можна оголосити метод якprivate такий метод недоступний через URL сайту

як і в Codeigniter можна оголосити закритий метод із префіксом «_ »

- Так само приватний метод.

Можна комбінувати два ці способи і оголосити метод так:

Контролер Codeigniter може містити ще дві функції, аналога яких поки немає в Kohana:

_remap($method) - дана функція призначена для локального роутингу, тобто. перенаправлення на інші контролери програми. Як параметр їй передається запитаний в URL метод.

_output($out) — функції передається оброблене відображення, призначене для відсилання браузеру. Ця функція може бути використана для кінцевої обробки виводу.

Відображення(VIEW)

В обох фреймворках відображення (або представлення, або view) це просто PHP сценарії, що містять в основному HTML-код. Однак спосіб роботи з відображеннямикардинально відрізняється у цих фреймворках.

Codeigniter

Для завантаження файлу відображення з контролера використовується виклик методу:

view_file ім'я файлу відображення без розширення "php".

У Codeigniter одночасно із завантаженням відбувається і виведення відображення у браузер користувача.

Для передачі параметрів у виставу, використовується наступний виклик:

де асоціативний масив містить параметри для відображення.

Якщо файл відображення міститиме наступний код:

Привіт $user_fname $user_lname!

Те «відтрендерне» відображення (сторінка, яку побачить користувач) виглядатиме так:

Привіт Андрій Опейкін!

Крім асоціативного масиву як другий параметр методу, можна передавати об'єкт, властивості якого, замінюють відповідні змінні у відображенні.

На мій погляд недоліком такого підходу є те, що при завантаженні відображення автоматично відбувається його відправлення в браузер користувача. Для перехоплення виведення необхідно використовувати метод контролера_output() — описаний раніше, так само отримати (а не вивести в браузер) повністю готове відображення можна передавши третій параметр метод завантаження подання:

Кохана

Для завантаження файлів відображень існує два способи:

Використання конструктора класуView

Виклик статичного методу (метод фабрики)

В обох випадках "view_file" - ім'я файлу відображення.

Використаннябудь-якого з цих способів, що призводить лише до створення об'єкта відображення, виведення вмісту відображення в браузер користувачаНЕ відбувається.

Скористаємося прикладом відображення, описаного вище.

Для передачі параметрів відображення використовується об'єктний підхід.

Також можна передати параметри методом set();

Встановлення параметрів відображення як і створення об'єкта відображенняНЕ призводить до пересилання інформації користувачеві.

Для надсилання висновку користувачеві необхідно викликати методrender() відображення

На мій погляд підхідKonaha зручніший і практичніший.

Моделі (Models)

В обох фреймворках використання моделей НЕ обов'язкове. За бажання можна обійтися контролерами та уявленнями.

Кохана

Як і у випадку з контролерами, вимагає, щоб клас моделі мав певний постфікс - "_Model ".

Для завантаження моделі з контролера необхідно просто створити екземпляр класу моделі:

Після цього можна звертатися до всіх методів та властивостей даного об'єкта.

Якщо конструкторі моделі викликається батьківський конструктор, тобто. конструктор має вигляд:

Автоматично завантажується клас для роботи з базою даних, доступний як

Codeigniter

Для завантаження класу моделі необхідно використовувати наступний код:

Після цього до методів моделі можна звертатися так:

Об'єкт для роботи з базою даних НЕ створюється автоматично при завантаженні моделі, для того щоб об'єкт все-таки створився, необхідно передати значення TRUE як третій аргумент:

Другий аргумент визначає псевдонім моделі, якими вона буде доступна в контролері.

Вся інформація профреймворку Kohana взято з відповідної документації. Можуть бути деякі неточності, тому що документація ще знаходиться в процесі розробки і описує далеко не всі можливості та API цього фреймворку.