Framework

SaaS-платформа для PHP

za-ek

Устройство фреймворка

Все запросы к сайту обрабатываются классом CController, сформированный запрос поступает на обработку классом CMain, где подготавливается конфигурация и происходит подключение файла шаблона. В файле шаблона определяется место подключения вызываемого файла.

Доступ ко всем элементам фреймворка осуществляется через объект приложения CMain, объект приложения можно получить через переменную $this.

Порядок выполнения запроса

  1. .htacces - запрос обрабатывается файлом htaccess и по умолчанию перенаправляет запрос на файл контроллера controller.php
  2. controller.php - файл контроллера, где происходит подключение файла с классом контроллера, куда передаётся запрос
  3. \zaek\engine\CController - в классе подгружается конфигурация сайта и информация о сайте, запускается приложение CMain
  4. \zaek\engine\CMain - приложение обрабатывает запрос и находит подключаемый файл, определяет заголовки, подключает буфферизацию и включает обработчики ошибок и автозагрузки классов, подключает шаблон или запускает требуемый файл
  5. \zaek\template\CTemplate - класс шаблона, подключающий файлы шаблона, откуда будет произведено подключение страницы
Архитектура фреймворка
$this \zaek\engine\CMain

Приложение

db() \zaek\db\CDBConnectionDriver

Драйвер подключения к базе данных

run() \zaek\db\CDBQueryResult

Результат запроса к базе данных

user() \zaek\user\CUser

Пользователь

auth() \zaek\user\CUserAuthenticate

Аутентификация пользователя

access() \zaek\user\CUserAccess

Права на выполнение различных действий

data() \zaek\user\CTempData

Доступ к cookies и сессии пользователя

fs() \zaek\kernel\CFile

Доступ к файловой системе

template() \zaek\engine\CTemplate

Шаблон

lang() \zaek\kernel\CDictionary

Функции локализации

conf() \zaek\kernel\CConfig

Конфигурация

loader() \zaek\kernel\CLoader

Автозагрузчик

courier() \zaek\courier\CNotify

Система уведомлений

Так выглядят основные файлы

template.php
<?php 
	$this->template()->setValue('html_language', 'ru');
	$this->lang()->addFile(__DIR__ . '/local.php');
?><!-- 
	Язык, как и многие другие параметры, может быть переопределён в подключаемых файлах 
--><html lang="<?=$this->template()->showValue('html_language')?>">
<head>
<title><?=$this->template()->showTitle('Za-ek Framework')?></title>
<?php 
$this->template()->showHeadHtml();
?>
</head>
<body>
<h2>Пример шаблона</h2>
<?php 

if ( isset($_GET['user']) ) {
	$this->user()->setData(array(
		'id' => 3,
		'login' => $_GET['user']
	));
}

$this->run();
?>
</body>
</html>
index.php
<?php 
if ( $this->user()->getId() > 0 ) {
	echo "Привет, пользователь!";
	// Добавление стилей в исполняемых файлах
	$this->template()->addCss('\greeting.css');
} else {
	echo "Вы не можете увидеть приветствие";
}

// Пример использования буферизации
$this->template()->setValue('html_language', 'en');
Результат | Результат с авторизацией

Вы можете переопределить классы

Если Вам необходимо расширить функционал, Вы можете переопределить создание классов

controller.php
<?php 
include $_SERVER['DOCUMENT_ROOT']."/zaek/lib/zaek/engine/ccontroller.php";

// При выборе языка новое приложение будет отдавать предпочтение языку, переданному через GET-параметр
class Main extends \zaek\engine\CMain 
{
	public function getLanguage()
	{
		if ( isset($_GET['language'] ) ) {
			// Список поддерживаемых языков
			$aLangs = explode(',', $this->conf()->getValue('content', 'language_list'));
			if (in_array($_GET['language'], $aLangs)) {
				return $_GET['language'];
			}
		}
		
		return parent::getLanguage();
	}
	
	// Вы также можете переопределить подключение вложенных объектов
	public function user()
	{
		// ...
		return parent::user();
	}
}
// Код нового контроллера, который будет вызывать изменённый класс приложения
class Controller extends \zaek\engine\CController
{
    public function runApp()
    {
        try {
            $app = new Main(new \zaek\kernel\CConfig($this->_config));
        } catch (\zaek\kernel\CException $e) {
            echo $e->getMessage();
        }
    }
}
// Подключение нового контроллера
$controller = new Controller;