Phpxcore:php5:architecture

Материал из phpXCoreWiki.

Перейти к: навигация, поиск

Back

Архитектуру еще не утрясли окончательно, но близьки к развязке


Содержание

[править] XCore

[править] MVC

Классическое описание шаблона на http://wikipedia.org

[править] Controller

в нашей системе будут следующие контроллеры:

[править] 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)
123