pluton
Новичок
Проектирование структуры портала
Структура:
/service/ - сервисы
/lib/ - "глобальные" классы
/html/ - document_root
/templates/ - шаблоны
config.php – "глобальный" конфиг
Папка /html/ является document_root’ом, в ней лежит один пхп файл – index.php. На сайте используется mod_rewrite. По этому любое обращение к php файлам “переадресуется” на index.php который в свою очередь подключает config.php.
В config.php происходит подключение к базе данных, установка констант и прочих настроек, некоторые из них:
- Устанавливается путь для поиска библиотек set_include_path(ROOT.'lib/');
- Объявляется функция __autoload() {require_once('class.'.$classname.'.php');}
- Весь URL разбивается по слешу, т.е. из ссылки http://example.ru/news/index.php получается массив $url = array(0=>'news', 1=>'index.php');
В папке /lib/ находятся “глобальные” классы, среди них лежит класс Control, который отвечает за подключение сервисов из папки /service/.
В файле config.php регистрируется список сервисов. Примерно так:
Структура папки /service/:
/service/news/
/service/news/lib/ - “локальные” классы
/service/news/config.php – “локальный” конфиг
/service/news/index.php
/service/news/newsdisplay.php
/service/service1/
…
И т.д.
В данный момент мы находимся в “сервисном” конфиге, т.е. /service/news/config.php
Здесь происходит регистрация страниц (она подобна регистрации сервисов)
Выглядит это примерно так:
Также при вызове start_page() устанавливается set_include_path(ROOT . $service_name . '/lib/' . PATH_SEPARATOR . get_include_path());
Т.е. в итоге include_path выглядит так: /service/news/lib/:/lib/
Отсюда видно, что при создании экземплятора класса, файл ClassName.php “ищется” сначала в “локальной” библиотеке, потом в “глобальной” т.е. приоритет стоит у локальной библиотеки, тем самым мы избавляемся от проблемы одинакового наименования классов.
Структура рассчитана под PHP 5.
Что думаете по поводу такой структуры? Хотелось бы услышать мнения умных людей.
Было бы интересно посмотреть на другие структуры, кидайте ссылки.
Структура:
/service/ - сервисы
/lib/ - "глобальные" классы
/html/ - document_root
/templates/ - шаблоны
config.php – "глобальный" конфиг
Папка /html/ является document_root’ом, в ней лежит один пхп файл – index.php. На сайте используется mod_rewrite. По этому любое обращение к php файлам “переадресуется” на index.php который в свою очередь подключает config.php.
В config.php происходит подключение к базе данных, установка констант и прочих настроек, некоторые из них:
- Устанавливается путь для поиска библиотек set_include_path(ROOT.'lib/');
- Объявляется функция __autoload() {require_once('class.'.$classname.'.php');}
- Весь URL разбивается по слешу, т.е. из ссылки http://example.ru/news/index.php получается массив $url = array(0=>'news', 1=>'index.php');
В папке /lib/ находятся “глобальные” классы, среди них лежит класс Control, который отвечает за подключение сервисов из папки /service/.
В файле config.php регистрируется список сервисов. Примерно так:
PHP:
$control = new Control;
//$control->register_service('права доступа', 'имя сервиса (совпадает с $url[0])');
$control->register_service(100, 'news');
//100 – доступ разрешён всем
//news – если пользовать переходит по ссылке http://example.ru/news/ то запускается сервис news.
$control->register_service(100, 'service1', );
//100 – доступ разрешён всем
// service1 – если пользовать переходит по ссылке http://example.ru/service1/ то запускается сервис service1.
// Запус сервиса:
require_once($control->start_service());
// Если с правами доступа всё нормально, то функция start_service возвращает путь к /service/(service_name)/config.php
// Будем считать что пользователь пошёл по ссылке http://example.ru/news/, и далее рассмотрим структуру на примере news.
// Если пользователь перешёл по ссылке которая не зарегистрирована, выдаём 404.
/service/news/
/service/news/lib/ - “локальные” классы
/service/news/config.php – “локальный” конфиг
/service/news/index.php
/service/news/newsdisplay.php
/service/service1/
…
И т.д.
В данный момент мы находимся в “сервисном” конфиге, т.е. /service/news/config.php
Здесь происходит регистрация страниц (она подобна регистрации сервисов)
Выглядит это примерно так:
PHP:
//$control->register_ page (‘права доступа’, ‘имя файла (совпадает с $url[1])’);
$control->register_page(100, ‘index.php’);
$control->register_page(100, ‘newsdisplay.php’);
// Подключаем страницу
require_once($control->start_page());
// Если с правами доступа всё нормально, то функция start_page() возвращает путь к /service/news/(имя файла)
//Будем считать что пользователь пошёл по ссылке - http://example.ru/news/newsdisplay.php?id=777
// Следовательно, функция start_page() вернёт путь до /service/news/newsdisplay.php
Т.е. в итоге include_path выглядит так: /service/news/lib/:/lib/
Отсюда видно, что при создании экземплятора класса, файл ClassName.php “ищется” сначала в “локальной” библиотеке, потом в “глобальной” т.е. приоритет стоит у локальной библиотеки, тем самым мы избавляемся от проблемы одинакового наименования классов.
Структура рассчитана под PHP 5.
Что думаете по поводу такой структуры? Хотелось бы услышать мнения умных людей.
Было бы интересно посмотреть на другие структуры, кидайте ссылки.