Nirvana - Мой PHP Фреймворк
Решил собрать старые черновики в кучу и за одно вспомнить PHP т.к. начал его забывать.
Всем кто решит попробовать мою поделку обещаю помощь. Буду рад любой активности на github. Участие в разработке могут принять все желающие. Основное требование: лёгкость и простота. Я не хочу перегружать его всякими парсерами YAML конфигов, кешированием, "публикацией ресурсов". Т.е. всё то с чем я намучался в других фреймворках. Не спорю, мб это всё не так плохо. Пока не готова даже bata-версия, по этому даю ссылку на ветку develop Проблемы которые вы можете попытаться помочь мне решить: - фреймворк не проверен под виндой и на апаче. не уверен что .htaccess кореектный - не плохо бы настроить vagrant и закоммитить конфиг (уж очень это сейчас популярно) - ORM очень сырая. чуть позже я попытаюсь доработать её и сделать код более понятным - нужно прикрутить Composer и настроить автозагрузку. если конечно вообще возможно сделать универсальной автозагрузку для всего что устанавливается через Composer. возможно стоит рассмотреть другие менеджеры зависимости - CLI..... нужно сделать хотя бы примитивный кодогенератор. за источник вдохновения лучше взять аналог из симфони. ибо там тоже Twig для этого используется как и у меня. - юнит тесты.... По всем вопросам пишите на alexismaster@lenta.ru Чуть позже добавлю небольшой "Quick Start" для разработчиков. +++++++++++++++++++++++++++++ Обещанный Quick Start: 1. Копируем Код:
git clone https://github.com/alexismaster/nirvana.gitКод:
git checkout develop4. По умолчанию фреймворк использует конфиг dev.config.php public/index.php: Код:
Nirvana\MVC\Application::init(require 'src/config/dev.config.php')->run($debugMode);5. Теперь о самом конфиге
return array(
// Настройки подключения к СУБД
'DB' => array(
'MYSQL_HOST' => 'localhost',
'MYSQL_USER' => 'root',
'MYSQL_PASS' => '13271327',
'MYSQL_BASE' => 'viliot',
'TABLE_PREF' => '', // Префикс таблиц
),
// Настройки маршрутизатора
'ROUTER' => array_merge(
require('_routes_.php'),
require(__DIR__ . '/../modules/SampleForumModule/config/_routes_.php'),
array(
'orm-update' => array('url' => '/orm-update/', 'controller' => 'Default', 'action' => 'orm'),
)
)
);
С базой данных я думаю всё понятно. Код:
require('_routes_.php'),Код:
require(__DIR__ . '/../modules/SampleForumModule/config/_routes_.php'),Код:
/orm-update/Сейчас в папке SRC (код приложения) есть несколько контроллеров реализующих простенький бложек с комментариями и заготовка модуля под форум. В дальнейшем я планирую выделить это в отдельную ветку чтобы можно было мержить её по желанию. ++++++++++++++++++++ у проекта появился домен :) в течении пары недель перевезу всё на виртуалку и дам ссылку |
Давай поговорим про автозагрузчик.
Меня всегда убивает когда в автозагрузчике проверяют наличие файла. Вот скажи зачем, если файла нет я должен увидеть ошибку. А не лазить затем дебажить почему, что то не работает. У тебя же даже не реализовано вывод ошибки об отсутствии файла. Регулярки там вобще незачем. по коду бегло пробежавшись видно они нравятся сильно. Цитата:
/**
* Automatic loader classes
*/
spl_autoload_register(
/**
* @param string $class
*/
function ($class) {
include PATH_ROOT . str_replace('\\', '/', $class . '.php');
}
);
|
Цитата:
Цитата:
В общем я исправил и сейчас так:
spl_autoload_register(function ($className) {
$path = str_replace('\\', '/', $className);
$path = str_replace('Nirvana/', 'framework/', $path); // Классы фреймворка
$path = str_replace('SRC/', 'src/', $path); // Классы приложения
$path = preg_replace('/\\/([A-z]+Module)/', '/modules/$1', $path); // Классы модулей приложения
$path = $path . '.php';
require_once $path;
});
https://github.com/alexismaster/nirv...autoloader.php |
Теперь удалим внимание вот этим строкам
$path = str_replace('Nirvana/', 'framework/', $path); // Классы фреймворка
$path = str_replace('SRC/', 'src/', $path); // Классы приложения
$path = preg_replace('/\\/([A-z]+Module)/', '/modules/$1', $path); // Классы модулей приложения
$path = $path . '.php';
эти регулярки можно спокойно убрать переписав названия неймспесов и зачем добавили _once. Класс загруженный единожды, второй раз подключатся не будет :) |
Цитата:
думаю папку framework переименовать в Nirvana или неймспейс поменять на framework и SRC.... мб Application и неймспейс соответствующий а с модулями как? Application\Module\ForumModule\Controller\IndexCon troller ? |
готово
spl_autoload_register(function ($className) {
require str_replace('\\', '/', $className) . '.php';
});
Цитата:
|
| Часовой пояс GMT +3, время: 04:58. |