1. IDE-подсказки при работе c ORM. Их нет. Например, код:
$latestPosts = ORM::factory('Post')->fetchLatests($limit);
Названия методов из класса Model_Post придётся вспоминать (например, fetchLatests), т.к. IDE покажет подсказки только для класса ORM, а Model_Post - наследник ORM. Перейти в метод по ctrl+click не получится. Вы можете возразить, есть же PHPDoc @var:
/** * @var $modelPost Model_Post */ $modelPost = ORM::factory('Post', $postId); $latestPosts = $modelPost->fetchLatests($limit); //теперь IDE любезно покажет доступные методы и перейдёт по ctrl+click
Но, согласитесь, дублировать избыточный PHPDoc в десятки или сотни различных мест приложения не очень удобно.
2. Медленное развитие, отставание от конкурентов. Малое количество официальных модулей. Это так.
- driver mysqli до сих пор официально не появился! А ведь mysql_connect в версии php 5.5 depricated.
Чтобы работать с Kohana на php 5.5 нужно или поставить собаку в Kohana_Database_MySQL на вызов mysql_connect, или найти неофициальный адаптер mysqli и переключиться на mysqli.
3. Не удобный класс Request. Попробуйте задать свои юзерагент и реферрер при выполнении http-запроса. Я пока что нашёл единственный вариант, который связан с подменой суперглобальной переменной $_SERVER $_SERVER['HTTP_USER_AGENT']
, $_SERVER['HTTP_REFERER']
. Логично было бы иметь метод setUseragent или просто setHeaders для возможности установить свои заголовки в curlClient.
$_SERVER['HTTP_USER_AGENT'] = 'этот юзерагент применится '; $_SERVER['HTTP_REFERER'] = 'этот реферрер применится'; $clientParams = array( // в этих параметрах задать не получается. 'HTTP_USER_AGENT' => 'Mozilla try 1', 'User-Agent' => 'Mozilla try 2', 'HTTP_REFERER' => 'а кохане то пох..', ); $response = Request::factory('http://jeka.by', $clientParams) ->method(Request::GET) ->execute(); var_dump($response->body()); exit;
4. Не удобно писать phpunit тесты. Не исключаю, что я плохо продвинулся в этом направлении. Имеется даже модуль unittest. Тесты я запускаю так: phpunit --bootstrap=modules/unittest/bootstrap.php tests/
Что мне не нравится в тестах коханы?
- связанность основного и тестового окружения. Для тестов использую отдельную тестовую базу. При тестировании страниц через http-запрос запрос попадает на рабочее (локальное) окружение! [решил проблему: использовать класс Request с относительным путём - обязательно без http://server/ - тогда запрос попадает сразу на route в том же окружении, откуда и запускается]
-
Если залогинить пользователя в одном из тестов (
force_login
), то разлогинить его уже не получается, падает с фаталом "Headers already sent" при вызовеlogout
. Т.е. для всех тестируемых файлов пользователь остаётся залогиненным! [решилось правками системных файлов, но фиксы вносились строго для возможности тестирования и выглядят как костыли].
5. Поддержка фреймворка практически остановлена, версия kohana 3.4 скорее всего не выйдет никогда. Это очень большой минус, ведь другие фреймворки в это время активно развиваются.
Можно почитать что пришлось изменить при миграции kohana проекта с php 5 на php 7.
Если вы знаете другие неприятные моменты в Kohana или вы в чём-то принципиально со мной не согласны — welcome в комменты.
Eсть предложение дать ещё одно название фреймворку Kohana - "Кокаха" . Как отмечено в первом комментарии, это категорически не верно. Kohana интересный фреймворк, который заслуживал (и заслуживает) внимания. Для многих Kohana является первым php-фреймворком, с которым они познакомились. Можно говорить о достоинствах фреймворка (ООП, каскадная файловая система, низкий порог вхождения), но, этот пост о недостатках Кохана.
Комментарии 2
Зарегистрировался на этом сайте только для того, чтобы добавить этот комментарий. Уж не смог пройти мимо!
Насчёт 1. IDE-подсказки при работе c ORM, у меня как раз вызывает неудобство. Я привык, что запросы, которые связаны с какой то таблицей, находятся строго в файле модели, а не разбросаны в контроллерах. Если я вижу вызов модели в контроллере KO, то, чтобы перейти в конкретный метод, приходится открывать модельку вручную и уже там искать метод вместо прямого перехода по onClick. Знаю, можно заготовить статические методы в каждой модели с PHPDoc, чтобы исправить это, но, из-коробки этого нет.