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 develop 4. По умолчанию фреймворк использует конфиг 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, время: 09:51. |