<commit_before>#Nadir Framework

Yet another MVC PHP microframework.

##Основной конфигурационный файл приложения

Веб-приложение представляет собой singleton-экземпляр класса `\core\WebApp`. При 
создании приложения его настройки берутся из файла `/config/main.php`. Конфигурации 
являют собой ассоциативный массив, который считывается при загрузке ядра фреймворка. 
Массив доступен для модификации и расширения и по умолчанию включает следующие 
элементы:

- `componentsRootMap` - карта путей компонентов приложения.
- `autoloadingRootSet` - множество корей директорий, включенных в автоподгрузку 
классов PHP.
- `defaultLayout` - умалчиваемый файл с разметкой макета.
- `page404` - разметка страницы с "ошибкой 404" по умолчанию.
- `routeMap` - таблица роутинга, содержащая соответствие между URL запроса и парой 
Controller-Action.

Доступ к конфигурациям внутри клиентского кода осуществляется посредством метода 
`\core\AppHelper::getConfig()`, в который передается имя требуемой настройки.

##componentsRootMap

Организация каталогов, содержащих основные компоненты приложения, не является раз 
и навсегда определенной. Под компонентами понимаются базовые сущности приложения: 
контроллеры, внутренние библиотеки, сторонние библиотеки, изображения, видео и пр. 
Пользователь фреймворка может самостоятельно изменить или добавить новую иерархию 
директорий. Например, если веб-приложение будет использовать видео-файлы, можно их 
хранение осуществлять в директории `/assets/video`, предварительно указав в 
конфигурационном файле:
````
'componentsRootMap => array(
    //...
    'video' =>  '/assets/video',
    //...
),'
````
Внутри клиенского кода путь к компоненту можно узнать вызовом метода 
`\core\AppHelper::getComponentRoot()`. Можно также получить абсолютный или 
относительный путь (URL) к компоненту по его имени, вызвав метод 
`\core\AppHelper::getComponentUrl()`. Полный URL обычно требуется для определения 
пути к медиа-файлам (директория `/assets`).<commit_msg>Расширена документация проекта в md-файлах.<commit_after>#Nadir Framework

Yet another MVC PHP microframework.

##Основной конфигурационный файл приложения

Веб-приложение представляет собой singleton-экземпляр класса `\core\WebApp`. При 
создании приложения его настройки берутся из файла `/config/main.php`. Конфигурации 
являют собой ассоциативный массив, который считывается при загрузке ядра фреймворка. 
Массив доступен для модификации и расширения и по умолчанию включает следующие 
элементы:

- `componentsRootMap` - карта путей компонентов приложения.
- `autoloadingRootSet` - множество корей директорий, включенных в автоподгрузку 
классов PHP.
- `defaultLayout` - умалчиваемое имя макета.
- `page404` - умалчиваемое представление страницы с "ошибкой 404".
- `routeMap` - таблица роутинга, содержащая соответствие между URL запроса и парой 
Controller-Action.

Доступ к конфигурациям внутри клиентского кода осуществляется посредством метода 
`\core\AppHelper::getConfig()`, в который передается имя требуемой настройки.

##componentsRootMap

Организация каталогов, содержащих основные компоненты приложения, не является раз 
и навсегда определенной. Под компонентами понимаются базовые сущности приложения: 
контроллеры, внутренние библиотеки, сторонние библиотеки, изображения, видео и пр. 
Пользователь фреймворка может самостоятельно изменить или добавить новую иерархию 
директорий. Например, если веб-приложение будет использовать видео-файлы, можно их 
хранение осуществлять в директории `/assets/video`, предварительно указав в 
конфигурационном файле:
````
'componentsRootMap' => array(
    //...
    'video' =>  '/assets/video',
    //...
),
````
Внутри клиенского кода путь к компоненту можно узнать вызовом метода 
`\core\AppHelper::getComponentRoot()`. Можно также получить абсолютный или 
относительный путь (URL) к компоненту по его имени, вызвав метод 
`\core\AppHelper::getComponentUrl()`. Полный URL обычно требуется для определения 
пути к медиа-файлам (директория `/assets`).

##autoloadingRootSet

Nadir легко организует автоподгрузку классов PHP. `\Autoloader`
позволяет автоматически загружать классы, именованные как в стиле пакетов 
PEAR (`foo_bar_Class`), так и классы, имена которых связаны с пространствами имен 
(`\foo\bar\Class`). По умолчанию в `autoloadingRootSet` включены следующие корни: 
- `/` - автоподгрузка контроллеров. 
- `/libs` - автоподгрузка пользовательских классов.
При необходимости вы можете расширить список корней. Например, если требуется 
организовать автоматическую загрузку классов некоторого стороннего фреймворка, 
располагающихся в директории `/vendor/some_framework_name/src`, в конфигурационном
файле следует указать:
````
'autoloadingRootSet' => array(
    //...
    '/vendor/some_framework_name/src',
    //...
),
````
В этом случае обращение к классу, физически расположенному в файле 
`/vendor/some_framework_name/src/foo/Bar.php` в клиентском коде будет выглядеть 
как `\foo\Bar` либо `foo_Bar`. Альтернативным (но не рекомендуемым) вариантом 
добавления корня в стек автозагрузки будет вызов следующего кода в любой момент,
предшествующий непосредственному обращению к загружаемому классу:
````
\Autoloader::getInstance()->add('/vendor/some_framework_name/src')->run();
````

##defaultLayout
Умалчиваемое имя макета, которому соответствует файл с разметкой, располагающийся 
в корне компонената `layouts`. Конфигурация опциональна, при ее отсутствии
представление по умолчанию не будет "вклеиваться" в макет.

##page404
Значением этой конфигурациия является имя PHP-файла без расширения, лежащего в 
корне компонента `views`. Изменять это значение не следует.

##routeMap
Таблица маршрутизации содержит соответствие между URL запроса и парой 
Controller-Action, ответственной за его обработку. URL запроса может включать
целое множество вариантов запросов, если он (URL) представлен регулярным
выражением. В этом случае все части строки запроса, соответствующие подмаскам, 
будут переданы как аргументы в Action. Например, `routeMap` содержит такой 
маршрут:
````
'routeMap'	=> array(
	//...
	'/foo/(bar|baz)/(\d+)'	=> array('CtrlName', 'actionName'),
	//...
)
````
Тогда запрос по URL `http://some_host.com/foo/baz/42` приведет к вызову 
````
\controllers\CtrlName->actionName('baz', 42);
````
Следует помнить, что имя вызываемого метода в контроллере должно начинаться с 
префикса `action`. Перебор маршрутов идет по порядку до первого совпадения,
поэтому более специфичные regExp следует располагать в начале, а более общие - 
в конце карты.

##Расширение файла конфигурации
Очевидно, что не для всякого веб-приложения будет достаточно базовых возможностей
Nadir. Идеалогия фреймворка всячески поддерживает расширение функционала приложения.
Так, если предполагается использование некой СУБД, то в конфигурационный файл
следует вынести ее настройки, например, в следующем формате:
````
return array(
	//...
	'db'	=>	array(
		'host'     => '',
		'username' => '',
		'password' => '',
		'dbname'   => ''
	);
	//...
);
````
{'fraction_non_alphanumeric': 0.08622171297622458, 'fraction_numerical': 0.0027212832999140646, 'mean_word_length': 5.207111111111111, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 18, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5075800', 'n_tokens_mistral': 2834, 'n_tokens_neox': 3312, 'n_words': 711}