Дорогие хабровчане, хотел бы на ваш суд выставить свою переработку/доработку известного фреймворка Codeigniter с попыткой адаптации модулей к фреймворку YII и «независимыми» модулями.
CI/YII Module Codeigniter v.1.0 (MCI v 1.0)
Расширенная версия Codeigniter для использования модульной системы (модульная архитектура). Архитектура адаптирована к фреймворку YII с минимальными «издержками». Версия первая, могут быть конечно баги, но всё таки её использую часто в своих проектах.
Добавлена функциональность в v 1.0:
- использование модульной архитектуры (роутинг /nameModule/nameController/nameAction) в целом одинакова с YII, кроме вложенности модулей
- использование виджетов идентично YII, так же добавлен метод-перехватчик isShow() для инкапсуляции логики отображения виджета, вызывается перед отображением
- роутинг к модулю можно перезаписывать в конфигурации
- добавлен автолоад классов с добавлением импортируемых путей в application/config/import.php
- добавлен ClientManager управляющий ресурсами системы (возможность разделения использования CDN)
- использование layout архитектуры шаблонов (есть, пока, одно не удобство, имена шаблонов должны быть уникальными)
- встроены Unit Tests окружение (CIUnit) с небольшой доработкой окружения и bootstrap
- модели БД, в настоящий момент, реализуют архитектуру ActiveRecord YII (не полностью, основные методы, пока без использования конструктора запросов)
- введение моделей представления ViewModel для использования связи контроллера с шаблоном
- использование коротких «сквозных» функций для использование во всей системе, аналог статических методов YII::method() даёт безболезнено использовать модули при переносе в любую систему и лаконичность чтения кода
Я знаю, что могут быть вопросы, что лучше подгружать модели и классы через стандартный Codeigniter метод, но я посчитал удобным отдавать логику подгрузки классов автолоадеру с учётом того что это более гибче так как использование стандартной функциональности создаёт зависимость. Загрузка классов с помощью Codeigniter сохраняется.
Окружение для тестов взято с CIUnit.
Изменения можно найти на github: MCI v 1.0.