Немного подробнее.
В дирректории
App/ будут собраны скрипты, непосредственно генерирующие страницы. Контроллеры, модели, вьюшки, хэлперы и т.д.
В папке ядра
Core/ будут собраны все библиотеки приложения. Они могут понадобиться при генерации разных страниц. Ну и еще несколько скриптов инфраструктуры. Автозагрузчик классов, коммутатор, роутер (если понадобится), конфигуратор и т.д. Тоесть то, без чего приложение останется просто набором файлов.
В папке
vendor/ располагаются сторонние библиотеки и системы, которые мы захотим вдруг использовать на своем сайте. Это общепринятая практика, это удобно.
Ну а
www/, это папка с доступом по HTTP. Можно назвать иначе, у меня привычка еще со времен Денвера.
Тут ошибочно можно подумать, что это и есть фреймворк, от которого я так старательно бегаю. Но нет, это классическая сборка библиотек. Чем они отличаются я
писал здесь. В двух словах:
Разница в управлении.
В схеме фреймворка, фреймворк управляет библиотеками и приложением.
В сборке приложение управляет библиотеками напрямую.
В процессе поймете разницу.
Ну а теперь можно приступить ко второму пункту, сиречь инфраструктуре.
Для начала нужна точка входа и автозагрузчик классов. С точкой входа все ясно, это банальный
index.php в публичной папке.
А вот с автозагрузчиком сложнее. Что использвать: PSR-0, PSR-4, нашумевший автолоадер от композера или свой велосипед?
PSR-0 фиговцы сами объявили deprecated. PSR-4 не лишен смысла, но он немного однобок. Готовый из их примера по мне так еще и избыточен. В композере я вообще не вижу смысла. Мало того, что он монструозен, так с ним еще нужно возиться, как с неразумным дитятей. JSON прописывать, пересканировать файлы и т.д.
Так что я предпочитаю старый добрый KISS. Написать свой, аскетичный, но который будет решать все текущие задачи.
<?php
defined('BASE_PATH') or define('BASE_PATH', dirname(__DIR__));
spl_autoload_register(function ($class) {
$files[] = BASE_PATH .'/'. $class;
$files[] = BASE_PATH .'/vendor/'. $class;
foreach ($files as $file) {
$file = str_replace('\\', DIRECTORY_SEPARATOR, $file .'.php');
if (is_readable($file)) {
include_once $file;
break;
}
}
});
Но вобщем то это не принципиально. Можно использовать любой, к чему больше лежит душа. В конце концов, это единственный скрипт, который не имеет интерфейса. Он управляется непосредственно из PHP. Так что заменить его на другой не потребует вообще никаких усилий.
Для текущей задачи его достаточно, мы будем юзать немспейсы по рекомендации PSR-4. Кроме того, если потребуется другой стандарт, всегда можно зарегистрировать другой автолоадер, а потом вернуться назад. А может и не понадобится. Не будем нарушать святой YAGNI.
Теперь его нужно подключить к индексу:
index.php<?php
require __DIR__ .'/../Core/Autoloader.php';
Вот тепрерь можно строить остальную инфраструктуру. Собирать библиотеки. Глядя на схему предметной области, можно понять, какие нам понадобятся:
1. Каптча
2. BB-декодер
3. Дерево
4. Пагинатор
5. Рейтинг
Но главное - база данных и дебаггер. О них чуть позже.
Организуем для библиотек структуру. Тут тонкость. Каждая библиотека должна располагаться в отдельной директории, даже если она состоит из одного файла. Это обусловлено несколькими причинами. Две основные:
1. Так проще организовать тестирование.
2. Если захочется заменить либу, то можно сделать адаптер. И тогда не нужно трогать приложение.
Ну и для порядка все их расположим в папке
Libs/
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.