[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: abc.php на правах bootstrap
Страницы: 1, 2, 3, 4
twin
Вообще это навеяно Yii, уж очень мне там нравится, как стартует фреймворк. Синтаксис нравится. Просто, лаконично, интуитивно понятно.

Особенности. Три уровня конфигурaционных файлов. Каждый нижний может переопределить значение верхнего. Чем ниже по структуре, тем выше приоритет. Конфига сайта перезаписывает конфигу приложения. Конфига приложения пререзаписывает конфигу фреймворка. Чтобы было понятнее, вот структура:
user posted image

И еще, нужно сделать так, чтобы фреймворк должен запуститься с пустыми конфигами или вовсе без конфиг. Он по дефолту должен быть настроен.

Почему сюда, а не на гитхаб сразу, по двум причинам. Пока некуда, со структурой еще не разобрались до конца. И еще, может меня опять так раскритикуют, что я перепишу все на 146% :)

Ну и особо больше ничего интересного, это просто скрипт запуска, тут еще ничего нет.
В индексе подключается так:
<?php

require_once __DIR__ .'/../vendor/abc/abc.php';
// Запускаем
Abc::createNewAbc();
// Признаки жизни
echo Abc::getVersion();


А вт и сам виновник торжества.
<?php

namespace ABC;

/**
* Текущая версия фреймворка.
*/

define('ABC_VERSION', '1.0.0');

/**
* Класс Abc
* Стартует фреймворк
* NOTE: Requires PHP version 5.5 or later
*
@author phpforum.su
*
@copyright © 2015
*
@license http://abc-framework.com/license/
* @package system.core
*/


class Abc
{

/**
*
@var object
*/

protected static $abc;

/**
*
@var array
*/

protected $config;

/**
*
@var string
*/

protected $autoload = __DIR__ .'/core/ABCAutoloader.php';

/**
* Запуск фреймворка
*
* Допускает инициализацию только одного объекта
*
* Принимает аргументaми массивы пользовательских настроек.
* Список настроек доступен в документации
*
*
@param array $appConfig
*
@param array $siteConfig
*
*
@return object
*/

public static function createNewAbc($appConfig = [], $siteConfig = [])
{
if (!empty(self::$abc)) {
throw new Exception('Only one object');
}

if (!is_array($appConfig)) {
throw new Exception('Configuring the application is to be performed array');
}

if (!is_array($siteConfig)) {
throw new Exception('Configuring the site is to be performed array');
}

self::$abc = new self;
self::$abc->run($appConfig, $siteConfig);
}

/**
* Возвращает объект фреймворка
*
*
@return object
*/

public static function current()
{
return self::$abc;
}

/**
* Возвращает текущие настройки
*
*
@return array
*/

public function getConfig()
{
return $this->config;
}

/**
* Формирует настройки и подключает автолоадер классов.
*
*
@param array $appConfig
*
@param array $siteConfig
*
*
@return void
*/

protected function run($appConfig, $siteConfig)
{
$this->config = array_merge($appConfig, $siteConfig);
$this->autoloadIclude();

if (!empty($this->config['debug_mod'])) {
$this->errorSelector();
}
}


/**
* Селектор выбора автозагрузчика
*
* Если в конфиге установлена настройка "composer", то подключит
* автозагрузчик композера
*
* Если в настройке autoload_path указан другой автозагрузчик, то установит его.
*
* Приоритет у настройки "composer"
*
*
@return void
*/

protected function autoloadSelector()
{
if (empty($this->config['composer']) && !empty($this->config['autoload_path'])) {
$this->autoload = $this->config['autoload_path'];

} elseif (!empty($this->config['composer'])) {
$this->autoload = __DIR__ .'/../autoload.php';
}

$this->autoloadIclude();
}

/**
* Подключает автолоадер
*
*
@return void
*/

protected function autoloadIclude()
{
include $this->autoload;
}

/**
* Выбор способа реакции на ошибку
*
* Принимает параметрами сообщение об ошибке и её уровень
*
*
@param string $message
*
@param int $errorLevel
*
*
@return void
*/

protected function errorSelector($message = '', $errorLevel = '')
{
$selector = new \ABC\abc\core\ErrorSelector($this->config);
$selector->setMessage($message);
$selector->setErrorLevel($errorLevel);
$selector->selectErrorMode();
}

/**
* Возвращает установленную версию фреймворка
* и его компонентов
*
*
@return string
*/

final public static function getVersion($component = '')
{
if (!empty($component) && is_string($component)) {
return (new \ABC\resourse\AbcComponents)->getVersion($component);
}

return ABC_VERSION;
}
}



Хочется проверить не только жизнеспособность идеи такого запуска, но и за одно порог вхождения. На сколько непонятен код?

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.