Skip to content
Anton edited this page Sep 6, 2013 · 32 revisions

Описание

Наше приложение, некий God Object

Настройка

Начинаем все с document root'a, вот вам пример .htaccessskeleton он уже есть), с его помощью все запросы будут заворачиваться на index.php:

# setup environment
# for mixed configuration app.BLUZ_ENV.php with application.php
SetEnv BLUZ_ENV production
SetEnv BLUZ_DEBUG_KEY debug
 
Options +FollowSymlinks
Options -Indexes
 
<IfModule mod_rewrite.c>
 
RewriteBase /public/
RewriteEngine On
 
# loop stopping
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]
 
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_URI} ^/(css|scripts|images|uploads) [OR]
RewriteCond %{REQUEST_URI} \.(jpe?g|png|gif|ico)$
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
 
</IfModule>

А вот и пример index.php взятый из skeleton:

<?php
// public/index.php

// Require loader
require_once '_loader.php';

// Debug mode for development environment only
define('DEBUG_KEY', isset($_SERVER['BLUZ_DEBUG_KEY'])? $_SERVER['BLUZ_DEBUG_KEY']:'debug');

if (isset($_COOKIE[DEBUG_KEY])) {
    define('DEBUG', true);
    error_reporting(E_ALL | E_STRICT);
    ini_set('display_errors', 1);
} else {
    define('DEBUG', false);
    error_reporting(0);
    ini_set('display_errors', 0);
}

// Shutdown function for handle critical and other errors
register_shutdown_function('errorHandler');

// iframe header - prevent security issues
header('X-Frame-Options: SAMEORIGIN');

function errorHandler() {
    $error = error_get_last();
    if (!is_array($error)
        || !in_array($error['type'], array(E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR))) {
        return;
    }
    require_once 'error.php';
}

// Try to run application
try {
    // init loader
    require_once PATH_LIBRARY . '/Bluz/_loader.php';
    require_once PATH_APPLICATION . '/Bootstrap.php';

    // Environment
    $env = isset($_SERVER['BLUZ_ENV'])? $_SERVER['BLUZ_ENV']:'production';

    /**
     * @var \Application\Bootstrap $app
     */
    $app = \Application\Bootstrap::getInstance();
    $app->init($env)
        ->process();
    $app->render();
    $app->finish();
} catch (Exception $e) {
    require_once 'error.php';
}

Создаем симлинку на public либо изменяем baseUrl в конфигурационном файле и .htaccess. И запускаем скрипт install.sh

Диспетчеризация

  1. Обрабатывается входящий запрос посредством объекта Request
  • Если это XMLHTTPRequest - то вызывается метод useLayout(false)
  1. Запускается процессинг роутеров, который вносит коррективы в объект Request
  2. Запускается диспатч конкретного контроллера:
  • Берётся рефлексия от контрроллера
  • Бросается событие dispatch
  • Проверяется доступ согласно Acl
  • Проверяем попадание в Cache
  • Еще раз перетираем параметры Request по текущим параметрам (могут отличаться)
  • Инициализируем View контроллера
  • Подключаем bootstrap.php данного модуля, если таковой есть
  • Подключаем контроллер
  • Запускаем функцию контроллера
  • Обрабатываем ответ контроллера (описание можно найти на странице контроллера)

Использование

Методы/геттеры инициализации пакетов фреймворка:

  • getAcl
  • getAuth
  • getCache
  • getConfig
  • getDb
  • getEventManager
  • getMailer
  • getMessages
  • getLayout
  • getLoader
  • getLogger
  • getRegistry
  • getRequest
  • getRouter
  • getSession
  • getTranslator
  • getView() - создаёт новый экземпляр класса View для передачи его внутрь контроллера.

Ещё методы:

  • getPath() - возвращает путь к приложение на файловой системе
  • getConfigData($section, $subsection) - возвращает конфигурацию системы, можно указать конкретный узел
  • hasMessage() - проверяет был ли инициализирован пакет Messages
  • log($message) - системное логирование

Методы для работы с выводом:

  • useLayout($flag) - вкл/выкл Layout
  • useJson($flag) - вкл/выкл вывод в формате JSON (все данные из View будут закинуты в JSON)

Application helpers

  • reload() - релоад текущей страницы - применяется для предотвращения сообщения о повторной отправки данных посредством POST, а так же для AJAX запросов
  • redirect($url) - редирект на заданный URL - работает как для обычных, так и для AJAX запросов
  • redirectTo($module, $controller, $params) - редирект на заданный контроллер
  • user() - возвращает текущего пользователя, если таковой есть

Clone this wiki locally