Сравнение на codeigniter и kohana, Андрей Опейкин
Кръг 1 MVC.
Кохана
За разлика от Codeigniter, Kohana изисква постфиксът “_Controller ” да присъства в името на класа на контролера, без да уточнява кой, при достъп до контролера получаваме съобщение за грешка “Fatalerror :Cannotredeclareclass ”.
Според мен това не е много удобно, тъй като разработчикът може да има свои собствени правила за именуване на класове, които по никакъв начин не се пресичат с правилата на Kohana. Това обаче избягва конфликти на имената в случаите, когато класът на контролера и, например, моделът са именувани еднакво.
За да обозначите методи, които са налични само в контролера (не са достъпни от сайта), Codeigniter предлага използването на префикса "_ " в името на метода.
Kohana предлага две възможности за решаване на този проблем (едната от които е най-интуитивната според мен), а именно:
можете да декларирате метод катоprivate— такъв метод не е достъпен чрез URL адреса на сайта
точно както в Codeigniter, можете да декларирате частен метод с префикса "_ "
също е частен метод.
Можете да комбинирате тези два метода и да декларирате метода по следния начин:
Контролерът в Codeigniter може да съдържа още две функции, които все още не са налични в Kohana:
_remap($method) - тази функция е предназначена за локално маршрутизиране, т.е. пренасочва към други контролери на приложения. Методът, заявен в URL адреса, се предава на него като параметър.
_изход($out) - обработеният дисплей се предава на функцията за изпращане към браузъра. Тази функция може да се използва за окончателна обработка на изхода.
Дисплеи(ПРЕГЛЕД)
И в двете рамки дисплеите (или изгледите, или изгледите) са просто PHP скриптове, съдържащи предимно HTML код. Въпреки това начинът, по който се обработват съпоставянията, е коренно различен в тези рамки.
Запалване на код
За да заредите файла на дисплея от контролера, се използва извикване на метод:
преглед_файл— преглед на име на файл без разширение "php".
В Codeigniter, едновременно със зареждането, дисплеят се извежда към браузъра на потребителя.
За предаване на параметри към изгледа се използва следното извикване:
където$някои_данни— е асоциативен масив, съдържащ параметри за показване.
Ако файлът за показване съдържа следния код:
Здравейте $user_fname $user_lname!
Този „изобразен“ дисплей (страницата, която потребителят ще види) ще изглежда така:
Здравей Андрей Опейкин!
В допълнение към асоциативен масив като втори параметър на метода, можете да подадете обект, чиито свойства заместват съответните променливи в дисплея.
Според мен недостатъкът на този подход е, че когато дисплеят се зареди, той автоматично се изпраща до браузъра на потребителя. За да прихванете изхода, трябва да използвате метода на контролера_output() —, описан по-рано, можете също да получите (вместо да изведете в браузъра) напълно подготвен дисплей, като предадете третия параметър към метода за зареждане на изгледа:
Кохана
Има два начина за зареждане на файлове за картографиране:
Използване на конструктора на класView
Извикване на статичен метод (фабричен метод)
И в двата случая "view_file" е името на файла за изглед.
Използванекойто и да е от тези методи води само до създаване на обект за показване, извеждането на съдържанието на дисплея къмбраузъра на потребителя НЕ се случва.
Нека използваме примера на картографирането, описано по-горе.
Използва се обектен подход за предаване на параметри към картографирането.
Можете също да предавате параметри, като използвате метода set();
Задаването на параметрите на дисплея, както и създаването на дисплейен обектNOT води до изпращане на информация до потребителя.
За да изпрати изхода, потребителят трябва да извика метода за изобразяванеrender()
Според мен подходътKonaha е по-удобен и практичен.
Модели (Модели)
И в двете рамки използването на модели НЕ е задължително. Ако искате, можете да се справите с контролери и изгледи.
Кохана
Както при контролерите, изисква класът на модела да има специфичен постфикс - "_Модел ".
За да заредите модела от контролера, трябва само да създадете екземпляр на моделния клас:
След това можете да получите достъп до всички методи и свойства на този обект.
Ако родителският конструктор се извика в конструктора на модела, т.е. конструкторът изглежда така:
Автоматично се зарежда класът за работа с базата данни, достъпен като
Запалване на код
За да заредите клас модел, използвайте следния код:
След това методите на модела могат да бъдат достъпни, както следва:
Обектът за работа с базата данни НЕ се създава автоматично при зареждане на модела, за да бъде създаден все пак обектът, трябва да подадете стойността TRUE като трети аргумент:
Вторият аргумент указва псевдонима на модела, чрез който ще бъде достъпен в контролера.
Цялата информация заFramework Kohana е взет от съответната документация. Възможно е да има някои неточности, тъй като документацията все още е в процес на разработка и не описва всички функции и API на тази рамка.