Phpxcore:php5:architecture
Материал из phpXCoreWiki.
| Архитектуру еще не утрясли окончательно, но близьки к развязке |
Содержание |
[править] XCore
[править] MVC
Классическое описание шаблона на http://wikipedia.org
[править] Controller
в нашей системе будут следующие контроллеры:
- Controller.php - XCore_Controller - абстрактный класс контроллера
- Controller/Main.php - XCore_Controller_Main extends XCore_Controller - Front-end системы (оперирует с классами Main)
- Controller/Admin.php - XCore_Controller_Admin extends XCore_Controller - Back-end системы (оперирует с классами Admin)
- Controller/Ajax.php - XCore_Controller_Ajax extends XCore_Controller - Реализация поддержки AJAX для модулей (оперирует с классами Ajax)
- Controller/Service.php - XCore_Controller_Service extends XCore_Controller - XMLRPC, SOAP и тд
- Controller/Cron.php - XCore_Controller_Cron extends XCore_Controller - Реализация выполнения действий по расписанию (оперирует с классами Cron)
- Controller/Install.php - XCore_Controller_Install extends XCore_Controller - Установка и конфигурирование системы (вполне вероятно будут классы Install)
- Controller/Addons.php - XCore_Controller_Addons extends XCore_Controller - Реализация всех других мелких действий (генерация CAPTCHA, WysIWyg, etc.)
[править] Model
Им будут соответствовать следующие классы модулей в системе:
- Module.php - XCore_Module - абстрактный класс модуля
Модуль будет представлять из себя (NM - Name Module):
- NM/Common.php - NM_Common extends XCore_Module - Класс предок для всех классов модуля
- NM/Main.php - NM_Main extends NM_Common - Front-end системы
- NM/Admin.php - NM_Admin extends NM_Common - Back-end системы
- NM/Ajax.php - NM_Ajax extends NM_Common - Реализация поддержки AJAX для модулей
- NM/Cron.php - NM_Cron extends NM_Common - Реализация выполнения действий по расписанию
- NM/Install.php - NM_Install extends NM_Common - Установка и конфигурирование системы
[править] View
Все классы отвечающие за представление данных будут наследоваться от абстрактного класса Zend_View_Abstract. Для контроллеров Main, Admin и Install таким классом является XCore_View.
[править] URL Analyser
URL будет строиться след. образом:
http://localhost/__LANG__/__CONTROLLER__/__MODULE__/__ACTION__/VarName1::VarValue1/VarName2::VarValue2/
[править] Controller
Ограничения на имя контроллера:
- не менее 4-х символов
Если запрашиваемый контроллер не найден - активным становиться контроллер по умолчанию.
Controller Main:
http://localhost/__MODULE__/__ACTION__/
Controller Admin:
http://localhost/admin/__MODULE__/__ACTION__/
Controller Install:
http://localhost/install/__MODULE__/__ACTION__/
Controller Service:
http://localhost/service/__MODULE__/__ACTION__/
Controller Addons:
http://localhost/addons/__MODULE__/__ACTION__/
Controller Ajax:
http://localhost/ajax/__MODULE__/__ACTION__/ && XCore_Request::isXmlHttpRequest()
Controller Errors:
Может сработать при 2-х условиях:
- произошло обращение к несуществующему контроллеру/модулю (404)
- ошибка уровня доступа
[править] Module
http://localhost/__CONTROLLER__/__MODULE__/__ACTION__/
Ограничения на имя модуля (и его алиаса):
- не менее 4-х символов
- не должен совпадать с именем (алиасом) контроллера
Имя модуля, определяется как следующий параметр после имени контроллера. Соответствует имени модуля или его alias'у.
[править] Action
http://localhost/__CONTROLLER__/__MODULE__/__ACTION__/
Действие, определяется как следующий параметр после имени модуля. Соответствует имени метода внутри модуля.
[править] Tasks
http://localhost/__CONTROLLER__/__MODULE__/__ACTION__/__TASK#1__/__TASK#2__/...
Все дальнейшие параметры будут преданы в модуль без изменений, работа с ними ложиться на модуль
[править] Plugin
Будет существовать некий массив опций с дефолтными параметрами, которые плагины смогут изменять по своему усмотрению:
$options = array ( 'skin' => 'default', // plugin 'skin' 'lang' => 'en', // plugin 'multilanguage' );
Плагины будут реагировать только на зарезервированные системные перменные передоваеммые через $_GET (/VarName::VarValue/)
[править] File Structure
application |
html |
.htaccess |
index.php |
[править] Template Engine
XCore_View - это простой, "некомпилирующий" шаблонизатор, наследуется от Zend_View. Мы отказываемся от использования Smarty, т.к. не видим причин для его использования.
[править] Configuration
Выбор пал на XML конфиги
[править] Parser
XCore_XML_Parser - написан класс, для работы с конфигами, базирующийся на SimpleXML, для кэширования использует XCore_Cache. Мы отказались от PEAR::Config, т.к. он слишком большой, и весь его функционал нам не нужен
[править] Files
Config.xml
<roles default="admin"> <all> <guest/> <user> <superuser/> </user> <admin> <superadmin/> </admin> </all> </roles> <translate enabled='true'/> <controllers default="Main"> <controller>Main</controller> <controller>Admin</controller> <controller>Ajax</controller> </controllers> <aliases> <controllers> <Main>main</Main> <Admin>admin</Admin> <Ajax>ajax</Ajax> </controllers> <modules> <XDefault>default</XDefault> <XMailbox>mailbox</XMailbox> <XPages>info</XPages> </modules> <actions></actions> </aliases> <!-- Database connections --> <database> <adapter>mysqli</adapter> <params> <username>p_phpxcore</username> <password>123</password> <protocol>tcp</protocol> <host>elephant.nixsolutions.com</host> <port>3306</port> <dbname>phpxcore</dbname> <persistent>false</persistent> </params> <options> <prefix>xc_</prefix> <debug>1</debug> </options> <charset>UTF-8</charset> </database> <!-- Options for views --> <view> <document> <type>HTML</type> <subtype>Transitional</subtype> <google> <analytics/> </google> </document> </view> <!-- Options for registry --> <options> <skin>default</skin> </options> <!-- Cache options --> <cache> <enabled>false</enabled> <frontendOptions> <lifetime>60</lifetime> <default_options> <cache_with_get_variables>true</cache_with_get_variables> <cache_with_post_variables>true</cache_with_post_variables> <cache_with_session_variables>true</cache_with_session_variables> <cache_with_files_variables>false</cache_with_files_variables> <cache_with_cookie_variables>true</cache_with_cookie_variables> <make_id_with_get_variables>true</make_id_with_get_variables> <make_id_with_post_variables>true</make_id_with_post_variables> <make_id_with_session_variables>true</make_id_with_session_variables> <make_id_with_files_variables>true</make_id_with_files_variables> <make_id_with_cookie_variables>true</make_id_with_cookie_variables> </default_options> </frontendOptions> </cache>
[править] Multilanguage
[править] HTML Forms
[править] Cache
- Кеширование массивов, объектов, файлов (Zend_Cache)
- Кеширование HTML (на уровне шаблонизатора опять же с использованием Zend_Cache)
application
Config.xml
.htaccess