Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Nirvana - Мой PHP Фреймворк (https://javascript.ru/forum/project/57196-nirvana-mojj-php-frejjmvork.html)

alexismaster 23.07.2015 19:33

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
2. Переходим в ветку develop
Код:

git checkout develop
3. Настраиваем DOCUMENT_ROOT на папку public. htaccess уже есть, должен работать, пример конфига nginx в коре репозитория.

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'),
это роуты модуля SampleForumModule

Код:

/orm-update/
Страница при переходе на которую происходит обновление БД в соответствии с имеющимися сущностями(моделями)




Сейчас в папке SRC (код приложения) есть несколько контроллеров реализующих простенький бложек с комментариями и заготовка модуля под форум. В дальнейшем я планирую выделить это в отдельную ветку чтобы можно было мержить её по желанию.



++++++++++++++++++++
у проекта появился домен :) в течении пары недель перевезу всё на виртуалку и дам ссылку

Vlasenko Fedor 23.07.2015 23:24

Давай поговорим про автозагрузчик.
Меня всегда убивает когда в автозагрузчике проверяют наличие файла.
Вот скажи зачем, если файла нет я должен увидеть ошибку. А не лазить затем дебажить почему, что то не работает. У тебя же даже не реализовано вывод ошибки об отсутствии файла.
Регулярки там вобще незачем. по коду бегло пробежавшись видно они нравятся сильно.
Цитата:

Сообщение от alexismaster
Основное требование: лёгкость и простота

/**
 * Automatic loader classes
 */
spl_autoload_register(
/**
 * @param string $class
 */
    function ($class) {
        include PATH_ROOT . str_replace('\\', '/', $class . '.php');
    }
);

alexismaster 24.07.2015 09:55

Цитата:

Сообщение от Poznakomlus
Меня всегда убивает когда в автозагрузчике проверяют наличие файла.

Я по чему то считал что так не будет выводиться путь типа /home/username/.... а будет просто класс нот фоунд. Не хотелось бы чтобы на проде было видно каталог пользователя т.е. его логин, но он всё равно выводится.


Цитата:

Сообщение от Poznakomlus
видно они нравятся сильно.

Абсолютно в дырочку :) Очень люблю, часто юзаю там где не нужно.

В общем я исправил и сейчас так:

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

Vlasenko Fedor 24.07.2015 10:15

Теперь удалим внимание вот этим строкам
$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. Класс загруженный единожды, второй раз подключатся не будет :)

alexismaster 24.07.2015 10:27

Цитата:

Сообщение от Poznakomlus
эти регулярки можно спокойно убрать переписав названия неймспесов

Тоже уже подумал. Мучаюсь с названиями.

думаю папку framework переименовать в Nirvana или неймспейс поменять на framework
и SRC.... мб Application и неймспейс соответствующий
а с модулями как? Application\Module\ForumModule\Controller\IndexCon troller ?

alexismaster 24.07.2015 11:45

готово
spl_autoload_register(function ($className) {
  require str_replace('\\', '/', $className) . '.php';
});



Цитата:

Сообщение от alexismaster
лёгкость и простота

достигнуты


Часовой пояс GMT +3, время: 10:26.