Pull to refresh
  • by relevance
  • by date
  • by rating

Фреймворк Kohana — впечатления от использования

Kohana *
Приветствую тебя, Хабрачеловек.

KohanaПолторы недели я пишу небольшой проект на Kohana. Сегодня решил немного рассказать об этом замечательном PHP-фреймворке и некоторых его особенностях, а также поделиться субъективными впечатлениями от работы. Надеюсь, кому-нибудь этот пост окажется полезен, особенно учитывая тот факт, что информации о Кохане в сети пока очень мало.

Итак.
Читать дальше →
Total votes 62: ↑53 and ↓9 +44
Views 15K
Comments 79

Барахолка на Kohanaphp. Часть 1

Kohana *
Делаем то же самое что и здесь, только используя Kohanaphp:

Отличия kohanaphp от codeigniter:

* Использует PHP 5 ООП
* Абстракция базы данных, используя SQL helpers
* Разнообразные драйвера сессий (native, database и cookie)
* Обработчик событий
* Основан на базе CodeIgniter
Получить kohana можна на сайте kohanaphp.
много кода с комментариями под катом
Total votes 15: ↑10 and ↓5 +5
Views 1.2K
Comments 5

Чудеса на серверах.

Lumber room
Прошу обратить внимание на то, что я считаю эту ситуацию из ряда вон выходящей, граничащей с мистикой, и поэтому прошу простить мне излишнюю литературность описания проблемы.

Вступление.


У меня есть вопрос. Как вы считаете, если в программе нигде не используется генератор случайных чисел (И вообще приложение не принимает никаких входящих аргументов, которые могут повлиять на её работу.), может ли она в зависимости от фазы луны или еще от чего либо выдавать разные результаты? Ну как бы наверное нет, я думаю вы со мной согласны.
А теперь давайте себе представим ситуацию.
Читать дальше →
Total votes 15: ↑7 and ↓8 -1
Views 201
Comments 53

Пример доски объявлений на Kohana

Kohana *

Kohana — довольно молодой PHP фреймворк, форк CI, всецело завязанный на ООП. К достоинствам Kohana можно отнести использование всех возможностей PHP5 на 100%, высокую скорость работы, «легковесность» и простоту как использования, так и изучения. Из минусов отчетливо выделяется небольшое комьюнити, как следствие, не шибко качественная документация и небольшое количество модулей и библиотек.

Не так давно своё знакомство с фреймворками я начинал именно с Kohana и, надо сказать, я был удивлен, насколько легко он мне поддался. Думал будет намного сложнее. Но очень сказывалась нехватка документации и примеров кода. Зарывшись в маны и разбор исходников, через некоторое время, я восполнил интересующие меня пробелы относительно Kohana, и поэтому решил написать эту статью, дабы другим хабралюдям, оказавшимся в схожей ситуации не пришлось по ночам не досыпать и лечить головные боли.

Под катом пример доски объявлений, написанный с помощью Kohana, возможно местами он не претендует на рациональность и здравый смысл, но всё-же я надеюсь услышать конструктивную критику.

Статья рассчитана на людей, имеющих понятие об MVC и ООП, но не имевших, либо мало имевших, дело с фреймворками.

Итак, приступим...
Total votes 73: ↑62 and ↓11 +51
Views 15K
Comments 82

Kohana vs Codeigniter, Синтетика производительности

Lumber room
Я хочу привести сравнение производительности двух удивительных (и, по моему скромному мнению, восхитительных) фреймворков, Kohana и Codeigniter. Тест синтетический, но, как мне кажется, все-таки интересный.
Смотреть что показали тесты
Total votes 13: ↑12 and ↓1 +11
Views 516
Comments 8

Вышел релиз Kohana v2.3.1

Kohana *
Обновился любимый фреймворк жителей данного блога :)
Собственно говоря, версия 2.3.1 была создана под лозунгом «даешь багфиксы!», поэтому и в changelog'е практически ничего другого мы не увидим.

Все перечислять тут не буду, только самые интересные:
  • В конфиге (application/config/config.php) опция "enable_hooks" не поддерживает передачу списка хуков — только суровое TRUE/FALSE. В общем-то, опция и в 2.3 не работала — просто комментарии в скрипте описывали эту «фишку», теперь комментарии более адекватны.
  • В хэлпере Inflector (работа со множественным и единственным числами слов) добавлены два исключения — courses и sizes (в единственном числе у них надо «отчекрыжить» только одну букву «s»).
  • В объект Database добавлены методы pop() и push(), а также свойство query_history для хранения стека запросов.
  • Из модели Auth убраны тестовые примеры. Логично — они использовали библиотеку Forge, исключенную из дистрибутива Kohana.


Ну и конечно ссылки:
Список изменений
Обсуждение
Страница загрузки
Total votes 7: ↑5 and ↓2 +3
Views 793
Comments 2

Модуль для иерархических представлений (View) для Коханы

Kohana *
Речь пойдет о первом моем модуле для фреймворка Kohana.

image
Признаюсь честно, при первом и последующих взглядах на этот фреймворк он мне очень понравился. Но как известно нет ничего идеального. Как мне показалось, одно из самых слабых мест в Кохане — довольно примитивные представления (View). По сути они предствляют из себя plain-php файл с экспортированными в глобальную область видимости переменными и доступным по ссылке $this контроллеру. Это очень удобно, когда вам нужно представление для вывода данных, нет ничего лишнего, можно сосредоточиться на коде. Но когда нам нужно вывести макет страницы со сложным расположением элементов, которые могут меняться от раздела к разделу… Что делать? Собирать все из мелких вьюшек в контроллере? Не удобно, особенно если контроллеров много — не дай бог, например, поменяется количество столбцов в разметке, придется в каждом контроллере перераспределять блоки с контентом по столбцам. Наверное по этому в версии 2.4 появится (я надеюсь) модуль интеграции со Смарти.
Читать дальше →
Total votes 34: ↑29 and ↓5 +24
Views 1.5K
Comments 15

Debug Toolbar

Kohana *

Kohana Debug Toolbar

Debug Toolbar — это модуль для Коханы, который упрощает отладку приложений, написанных на этом PHP-фреймворке. Благодаря различной статистической и отладочной информации, процесс разработки становится проще и приятней для программиста.

Под катом краткая инструкция по установке, описание возможностей и ссылки на дополнительную информацию.
Читать дальше →
Total votes 33: ↑25 and ↓8 +17
Views 3.1K
Comments 35

CodeIgniter Debug Toolbar

CodeIgniter *
CodeIgniter Debug Toolbar
Многие видели девелоперский тулбар для фреймворка Kohana (слизанный, в свою очередь, с Symfony), который недавно выкладывали на хабре. Мне он очень понравился — захотелось поиметь такой и для себя.

Немножко поколдовав, получилось нечто похожее…
Читать дальше →
Total votes 54: ↑43 and ↓11 +32
Views 4.1K
Comments 40

Реализация компонентов в Kohana

Kohana *
Представим себе ситуацию, что у нас на сайте есть виджет. Этот виджет повторяется на сайте на каждой странице. Как нам сделать дизайн кода так, чтобы забыть про этот виджет и сконцентрировать внимание на других проблемах?

Конечно мы не можем себе позволить обращаться к области данных из шаблона, иначе это указывало бы на нашу неграмотность. Во многих фрейверках есть для этого свои решения. Но я проведу аналогию с symfony. В последнем имеется такое понятие как компонент. Выглядит это примерно так: вы вызываете в шаблоне статический метод с указанием названия компонентов, далее происходит обращение к одноименному контроллеру, извлекаются данные из области данных и передаются в фрагмент шаблона, последний рендерится и код вставляется в нативный шаблон. Таким образом получается архитектура MVC вложенная друг в друга. Я немного упростил эту схему, сразу говорю, но суть передал точно.

Так вот. В Kohana готового решения нет. Поэтому я и написал простой способ реализации компонентов который решается в три строчки кода.

И так. Пишем хелпер widget.php и кидаем его в папку application/helpers. Содержание хелпера следующее:
Copy Source | Copy HTML
  1. <?php
  2. class widget
  3. {
  4.     public static function paste($className,$functionName,$parameters = null)
  5.     {
  6.         $controllerName = $className.'_Controller';
  7.         $controller = new $controllerName;
  8.         $controller->$functionName($parameters)->render(true);
  9.     }
  10. }
  11. ?>

В классе контроллера пишем метод обычного содержания только вместо рендеринга шаблона мы его возвращаем т.е пишет return. Я всегда использую немного переопределенный контроллер Template_Controller. Пример метода контроллера:

Copy Source | Copy HTML
  1. public function widget_example()
  2. {
  3.     return View::factory('_example.php',array('var' => 'Привет мир!'));
  4. }


Имя шаблона указываем с нижнего подчеркивания, что бы не путаться.
Теперь в любом шаблоне достаточно написать

Copy Source | Copy HTML
  1. <?php widget::paste('Index','widget_example')?>


И все — теперь вместо этой строки у нас отрендерится наш виджет. Вот так вот просто. Если необходимо то можем передать в компонент необходимые значения третьим аргументом в виде массива.
Кстати partial (symfony like) реализовываются простым включением в шаблон
Copy Source | Copy HTML
  1. <?php View::factory('template')->render() ?>

partial — это простое включение шаблона (для тех кто не знает)
P.S. Только давайте не будем разводить холивары по поводу Smarty(и т.п.) vs Native Template.
Есть много наработок по поводу Kohana — со временем опубликую цикл статей на блоге и здесь.
UPD. Перенести пост в блог Kohana немогу. Не хватает кармы
Total votes 9: ↑7 and ↓2 +5
Views 2.6K
Comments 29

Реализация состояний для веб-приложения

Kohana *
Возникал такая проблема. Для разных разделов веб-приложения необходимо было хранить состояния наборов параметров. Далеко ходить не нужно: значения в сессии или куки. Но управление значениями улжнилось тем, что при выходе из раздела состояния должны были терятся.

Ничего особо финтового в примере нет. Просто хелпер из трех функций: одна устанавливает состояние параметра, одна возвращает, одна сбрасывает. Значения храним в сессии.
Основная идея — в том что имя контроллера так же хранится в сессии, и при обращении к состоянию проверяется совпадение имени «последнего» контроллера и «активного». Если совпадают — возвращаем состояние. Если нет — устанавливаем дефолтовые значения состояний и возвращаем дефолтовое.

Такая схема позволяет:
  • свести работу с состояниями к статическому контроллеру и не оперирывать живыми переменными
  • вынести установку дефолтовых значений всех состояний системы в одно место

Читать дальше →
Total votes 6: ↑4 and ↓2 +2
Views 789
Comments 9

Двухпроходное View в Kohana

Kohana *
В Kohana я обычно использую класс Template_Controller. Очень удобно — layout один, изменяешь только контент. Но как быть если на одной какой-то странице нам понадобилось подключить CSS- или JS-файл?! C js- файлом еще ладно, его можно подключить посредине страницы (но это как-то некрасиво), а как же css?! — это невалидно. Подключать на весь layout тоже неохота. Хочу подключать не в контроллере, а в шаблоне к примеру так:
Copy Source | Copy HTML
  1. <?php head::addCSS('main')?>
Читать дальше →
Total votes 16: ↑10 and ↓6 +4
Views 2.6K
Comments 12

Переделываем приложение CD Collection

Kohana *
Итак, в предыдущем топике (виден только подписчикам блога!) я ссылался на статью о Kohana, размещенную на сайте NetTuts+. Поскольку в описанном в ней приложении есть недостатки, предлагаю их найти и обезвредить.
Интересно?
Total votes 8: ↑6 and ↓2 +4
Views 835
Comments 12

Что нам готовит Kohana 3

Kohana *
Как-то так получилось, что примерно месяц я не следил за разработкой этого замечательного фреймворка. Наблюдение за скоростью разработки версии 2.4 вызывало тоску. Но вчера я заглянул на сайт и ахнул. Оказывается, разработчики, не дождавшись готовности версии 2.4, успели уже выпустить целых 2 релиз кандидата версии 3. Глянул я в исходные тексты, немного почитал форум и стало мне так радостно на душе от грядущих изменений, что я решил не дожидаться 09.09.09 или ранее и поделиться радостью.
Читать дальше →
Total votes 29: ↑25 and ↓4 +21
Views 2.1K
Comments 52

Интеграция Doctrine в kohana 3

Kohana *
Здравствуйте,

После выхода Kohana 3 хочется ее использовать в новых проектах, и использование Doctrine показало, что инструмент очень удобный, потому поделюсь рецептом интеграции.
Читать дальше →
Total votes 27: ↑23 and ↓4 +19
Views 1.7K
Comments 36

Memcached и метки. Реализация для фреймворка Kohana

Kohana *
Приветствую всех.

Уже довольно давно разрабатываем проект на кохане и встала необходимость эффективного кэширования данных. Не то, чтобы вопрос производительности стоит очень остро в данный момент, но, хотелось бы подготовится заранее, а не писать систему кэширования в ночь после волны посетителей. Да и посещаемость постоянно растет, а в некоторые моменты бывают всплески до 3х раз по сравнению с обычным днем.

Собственно, в выборе системы кэширования особых вопросов не было — на ум сразу приходит всем известный memcached.

Если вы хотя бы немного смотрели memcached, то должны были отметить, что, по большому счету, он поддерживает только 2 операции: получение значения, запись значения. Нет никакой возможности вытянуть все ключи по определенному признаку или паттерну. Сделано это сознательно, с целью сделать его максимально простым, а значит, максимально быстрым.

Итак, представим ситуацию, что мы храним в кэше данные записей блога под ключами post_. В определенный момент нам требуется сбросить все записи с постами, при этом не очищая кэш полностью (там могут хранится другие данные, значения которых все еще актуальны). Ситуация получается безвыходная. Мы не знаем список ключей постов, получить их нет возможности, сбросить ключи по паттерну тоже невозможно. Что же делать?

Решение есть.
Total votes 25: ↑20 and ↓5 +15
Views 2.9K
Comments 19

Работа с командной строкой в Kohana3

Kohana *
На своём блоге я опубликовал статью о работе с командной строкой во фреймверке Kohana. Её можно почитать по адресу Работа с командной строкой в Kohana3

PS Уважая правила хабралюдей, я не делал кросспостинг.
Total votes 11: ↑6 and ↓5 +1
Views 674
Comments 8

Модуль авторизация через ВКонтакте для Kohana

Kohana *
После открытия API ВКонтакте сразу появилось несколько статей по созданию быстрой авторизации на своём сайте пользователей vk.com, в т.ч. и на PHP. Решил заняться написанием модуля авторизации для Kohana.

Документация по API очень хилая, пришлось изучать js-скрипты durov.at и переносить некоторый функционал на PHP (отправка POST-запроса с получением полной информации о пользователе, вместо ajax-овой реализации на durov.at). Самым сложным местом оказалось генерирование уникальной подписи запроса (как они объясняют, «подпись запроса по стандартной схеме»), т.к. этот процесс нормально не описан.

Модуль Vk умеет логиниться и получать информацию о пользователе и, соответственно, разлогиниваться. Информация хранится в cookie и в сессии. При желании, можно складывать всё в БД, запрашивать дополнительную информацию о пользователе и т.д.

Подробное описание на странице модуля в github. Не забываем создать свое приложение ВКонтакте для тестирования и записать полученные API ID, ключ приложения и защищенный ключ в config/vk.php, а также создать файл xd_receiver.htm по примеру в описании.
Total votes 44: ↑27 and ↓17 +10
Views 2.4K
Comments 17