Порівняння 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 цього фреймворку.