Phpxcore:php5:core
Материал из phpXCoreWiki.
Содержание |
[править] Introduction
В данной статья мы постараемся описать ядро системы, как оно работает. Для лучшего понимания советую открыть исходники нашей системы и просматривать код по ходу объяснений.
[править] Initialization
Для начала откроем файл index.php - в данном файле нас интересует только подключение файла Application.php. Открываем и видим что файл содержит класс Application который наследуется от класса XCore, т.е управление передается в конструктор класса XCore (в нем происходит вызов XCore_Loader::init() - он отвечает за регистрация функции autoloader и регистрация путей).
Далее, возвращаясь в файл index.php, видим вызова метода init() класса XCore, этот метод отвечает за инициализацию системы, в нем идет целый ряд вызовов (после каждого вызова идет вызов метода практически с идентичным названием, но начинающихся со знака подчеркивания, все они переопределены в классе Application, и вы можете воспользоваться ими для своих нужд):
[править] initErrorHandlers
Инициализация ErrorHandler'a - теперь управление ошибками полностью ложиться на ядро системы. (см. [www.php.net/set_error_handler set_error_handler] и [www.php.net/set_exception_handler set_exception_handler]). Используйте XCore_Exception вместо Exception.
[править] initSession
Инициализация сессии, создания сущности XCore_Session доступна из статической перменной XCore::$Session
[править] initConfiguration
Чтение конфигурационного файла 'Config.xml', и преобразование в массив. Конфигурационный файл доступен из статической переменной XCore::$Config. Раздел 'options' заноситься в реестр (см. XCore_Registry).
[править] initCache
Инициализация глобального кэша, для понимания принципов работы см. Zend_Cache_Frontend_Page (инициализация настраивается в Config.xml).
[править] initDB
Инициализация соединения с БД. параметры соединения берутся из файла Config.xml. Создается сущность XCore_Database, к которой можно достучаться через статическую переменную XCore::$Database
[править] initRequest
Инициализация класса XCore_Request -> XCore::$Request. Данный класс отвечает за парсинг URL'a. Он разбирает пришедший URL на контролы и параметры (первые передаются в URL как /control0/control1/control2/../../, параметры же в свою очередь передаются как связка ключ-значение и имеют вид /key0::value0/key1::value1/key2::value2/..::../..::../). Часть методов данного класса позаимствовано из Zend_Controller_Request_Http.
[править] initACL
Инициализация XCore_Acl (см. Zend_Acl), для формирования списка ролей и ресурсов используется Config.xml, раздел 'roles'.
[править] initTranslate
Инициализация XCore_Translate (см. Zend_Translate), для настройки данного функционала используется конфигурационный файл translate/Translate.xml. Для идентификации текущего языка используется следующая последовательность: данные из XCore::$Request (первый контрол), данные из сессии, и если ничего не найдено - проверяется конфигурация (язык по умолчанию)
[править] initPlugin
Далее происходит инициализация класса XCore_Plugin -> XCore::$Plugin. Конфигурационный файл plugins/Plugins.xml.
[править] initEventualist
Инициализация XCore_Eventualist -> XCore::$Eventualist. Конфигурационный файл plugins/Eventualist.xml.
[править] initUser
Инициализация XCore_User -> XCore::$User.
[править] initialize
Данный метод отвечает за инициализацию контроллера. На нем необходимо остановиться чтуь-чуть подробнее:
- создается класс XCore_Router
- вызывается метод processRequest - данный метод отвечает за определении контроллера (так же инициирует событие processRequest)
- вызывается метод initializeController
Инициализация контроллера заключается в подключении конфигурационного файла (modules/CONTROLLER_NAME.xml) и скармливания параметров в ACL. Далее идет обработка XCore::$Request - убираются лишние контролы и параметры.
[править] initResponse
Инициализация сразу нескольких классов:
- XCore::$Response = new XCore_Response()
- XCore::$View = new XCore_View()
- XCore::$Document = new XCore_Document()
[править] Run
Далее в файле index.php происходит выполнения метода run(), который в свою очеред вызывает метод execute() у активного контроллера. В данном методе происходит следующее:
- выполняются actDefault - поведение модулей по умолчанию (см. runDefault параметр в конфигурационном файле контроллера)
- проверяется права доступа на выполнение связки Module и Action (см. ACL)
- инициализируется модуль и выполняется запрошенное действие
- XCore::$View получает вывод для активного модуля (см. XCore_Module::ACTIVE)
[править] Display
Вызов метода display выполняет следующие действия:
- XCore::$Response отправляет заголовки
- XCore::$View генерирует HTML
