ФорумПрограммированиеПыхнуть хотите?Готовые решения → PHP фреймворк by Soulgarden

PHP фреймворк by Soulgarden

  • soul

    Сообщения: 790 Репутация: N Группа: Кто попало

    Spritz 24 июля 2010 г. 18:46

    Пока что минималистичный фреймворк, для небольших сайтов.

    о нем:

    1) в центре фреймворка лежит класс Loader, через которые подгружаются классы либ сайта, модели и конфиги.


    $settings = Loader::config('Settings');
    $form = Loader::lib('Forms');

    2) каждый конфиг хранится в файле в виде массива, имя файла конфига передаем лоадеру

    //файл settings.php в application/configs/

    <?php
    return array('title' =>'title', 'content' => 'content')
    ?>

    //работа с конфигом
    $settings = Loader::config('Settings');
    echo $settings['title'];


    3) роуты хранятся в конфиге routes, задаются обычными регулярками
    4) чтобы заменить системную библиотеку своей, достаточно а application/libs/ положить свою библиотеку с таким же названием
    5) в качестве шаблонизатора исользуется чуть переработанный компилирующий шаблонизатор phpdude, пример работы можно увидеть, скачав приложение

    notice :
    это очередной велосипед, в нем нет ничего уникального. просто мне с ним удобней

    в ближайших планах:
    1) добавить библиотеку ORM, хочется кешировать запросы на уровне орм.
    2) автосцепление шаблонизатора с контроллером. чтобы к примеру контроллер сам привязывался к шаблону с таким же названием.
    3) добавить поддержку hmvc
    4) сделать возможным не полное замещение библиотеки ядра, а возможность ее наследования для перегрузки методов.
    5) наследование пользовательской моделью основной модели. то есть чтоб если сайт использует orm с mysql, то пользовательская модель включала в себя все методы орм.
    6) появятся профайлер и отладчик

    в начале упор делал на скорость фреймворка и минималистичность, теперь на максимально возможную минималистичность, простоту и скорость при достаточном удобстве.

    это всё что вспомнилось сходу, код в приложении.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 24 июля 2010 г. 19:00, спустя 14 минут 23 секунды

    ты бы хоть демку накидал какую нить … а тоскучно глядетьв шаблон [$message] …
    Сапожник без сапог
  • soul

    Сообщения: 790 Репутация: N Группа: Кто попало

    Spritz 24 июля 2010 г. 19:17, спустя 16 минут 16 секунд


    ты бы хоть демку накидал какую нить … а тоскучно глядеть в шаблон [$message] …

    к следующей бете накидаю :-)
    кстати если можно, переименуйте файл, добавьте версию - 0.3
  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 24 июля 2010 г. 19:33, спустя 16 минут 23 секунды

    soulgarden, мне твое лицо на аватарке напоминает парня из gorilaz, или как их там)
  • soul

    Сообщения: 790 Репутация: N Группа: Кто попало

    Spritz 24 июля 2010 г. 19:43, спустя 9 минут 51 секунду


    soulgarden, мне твое лицо на аватарке напоминает парня из gorilaz, или как их там)

    это мое лицо больше года назад :-) а справа моя и по сей день любимая
  • wats

    Сообщения: 134 Репутация: N Группа: Кто попало

    Spritz 25 июля 2010 г. 8:19, спустя 12 часов 36 минут 13 секунд

    soulgarden, мне твой мини-фреймворк еще тогда понравился, но очень сыроват, возьмем к примеру класс Router
            $this->_routes = Loader::config('routes');

    это, как мне кажется, только лишняя зависимость от класса Loader.
    я бы сделал что бы роутер сам получал свой конфиг
    		$this->_routes = require (APPATH.'configs/routes.php');

    далее, вот это:
            $offset =  ltrim($_SERVER['SCRIPT_NAME'], '/index.php');
    $uri = ltrim($_SERVER['REQUEST_URI'], $offset);
    $this->_uri = trim($uri, '/');

    лучше заменить на что то типа:
            if (isset($_SERVER['REQUEST_URI'])) {
    $uri = trim($_SERVER['REQUEST_URI'], '/');
    }
    elseif (isset($_SERVER['PATH_INFO'])) {
    $uri = trim($_SERVER['PATH_INFO'], '/');
    }
    elseif (isset($_SERVER['PHP_SELF'])) {
    $uri = trim($_SERVER['PHP_SELF'], '/');
    }
    elseif (isset($_SERVER['REDIRECT_URL'])) {
    $uri = $_SERVER['REDIRECT_URL'];
    }
    else {
    throw new Exception('Error URI');
    }

    и еще:
    if (empty($flag)) return (explode('/', $this->_uri));

    от куда взялась переменная $flag?
  • wats

    Сообщения: 134 Репутация: N Группа: Кто попало

    Spritz 25 июля 2010 г. 8:36, спустя 16 минут 49 секунд

    И в Request надо бы добавить свойства $controller, $action что бы потом в application можно было с ними работать, например проверка при навигации:
    $this->request = Loader::lib('Request');
    if ($this->request->action === 'news') {
    // блаблабла
    }
  • wats

    Сообщения: 134 Репутация: N Группа: Кто попало

    Spritz 25 июля 2010 г. 8:50, спустя 14 минут 29 секунд

    в начале упор делал на скорость фреймворка и минималистичность, теперь на максимально возможную минималистичность, простоту и скорость при достаточном удобстве.

    тогда может лучше использовать натив-шаблонизатор?!
  • soul

    Сообщения: 790 Репутация: N Группа: Кто попало

    Spritz 25 июля 2010 г. 12:07, спустя 3 часа 16 минут 48 секунд


    в начале упор делал на скорость фреймворка и минималистичность, теперь на максимально возможную минималистичность, простоту и скорость при достаточном удобстве.

    тогда может лучше использовать натив-шаблонизатор?!


    нет. а с чего вы взяли, что компилирующий шаблонизатор медленнее? =) да и файл шаблона не должен я считаю содержать пхп кода
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 25 июля 2010 г. 12:12, спустя 5 минут 15 секунд

    soulgarden, дадай повыябываться человеку)) это же так круто!)
    Сапожник без сапог
  • soul

    Сообщения: 790 Репутация: N Группа: Кто попало

    Spritz 25 июля 2010 г. 12:29, спустя 16 минут 7 секунд



    if (empty($flag)) return (explode('/', $this->_uri));


    от куда взялась переменная $flag?


    это отголоски прошлой версии роутера =)

    И в Request надо бы добавить свойства $controller, $action что бы потом в application можно было с ними работать, например проверка при навигации:


    $this->request = Loader::lib('Request');
    if ($this->request->action === 'news') {
        // блаблабла
    }



    а вот это еще ни разу не было необходимо. тк итак весь код контроллера идет в основном в нужном экшене. ну, может, конечно, пригодится :-)
    soulgarden, мне твой мини-фреймворк еще тогда понравился, но очень сыроват, возьмем к примеру класс Router

            $this->_routes = Loader::config('routes');
    это, как мне кажется, только лишняя зависимость от класса Loader.
    я бы сделал что бы роутер сам получал свой конфиг
    PHP
            $this->_routes = require (APPATH.'configs/routes.php');


    а если кто-то захочет переместить папку конфиг или сделать обращения к ней как-то по другому? придется в куче мест копаться. а как избавиться от зависимости я подумаю.

    лучше заменить на что то типа:

            if (isset($_SERVER['REQUEST_URI'])) {
                $uri = trim($_SERVER['REQUEST_URI'], '/');
            }
            elseif (isset($_SERVER['PATH_INFO'])) {
                $uri = trim($_SERVER['PATH_INFO'], '/');
            }
            elseif (isset($_SERVER['PHP_SELF'])) {
                $uri = trim($_SERVER['PHP_SELF'], '/');
            }
            elseif (isset($_SERVER['REDIRECT_URL'])) {
                $uri = $_SERVER['REDIRECT_URL'];
            }
            else {
                throw new Exception('Error URI');
            }


    я подумаю над этим =)

    спасибо за внимание))
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 25 июля 2010 г. 12:52, спустя 23 минуты 3 секунды


            $this->_routes = Loader::config('routes');

    это, как мне кажется, только лишняя зависимость от класса Loader.
    я бы сделал что бы роутер сам получал свой конфиг
    		$this->_routes = require (APPATH.'configs/routes.php');

    из этих двух вариантов первый намного правильнее.
    wats, и только попробуй спросить меня почему…
  • wats

    Сообщения: 134 Репутация: N Группа: Кто попало

    Spritz 25 июля 2010 г. 13:21, спустя 29 минут 41 секунду

    а с чего вы взяли, что компилирующий шаблонизатор медленнее?

    не будем разводить очередной холивар на эту тему, натив быстрее, тут и дурак поймет

    soulgarden, дадай повыябываться человеку)) это же так круто!)

    видимо не понравилось человеку предложение "выкинуть его шаблонизатор".
    а вот это еще ни разу не было необходимо. тк итак весь код контроллера идет в основном в нужном экшене. ну, может, конечно, пригодится :-)

    ну например есть меню разделов сайта: news, articles, about, пользователь зашел на страницу новостей, значит ссылку news в меню надо сделать активной, и в этом нам поможет:
    if ($this->request->action === 'news') {…}

    wats, и только попробуй спросить меня почему…

    ну и почему? я считаю что такие классы должны работать самостоятельно и нечего не знать про Loader.
  • soul

    Сообщения: 790 Репутация: N Группа: Кто попало

    Spritz 25 июля 2010 г. 13:24, спустя 2 минуты 35 секунд

    не будем разводить очередной холивар на эту тему, натив быстрее, тут и дурак поймет


    не согласен. скомпилированный шаблон это пхп код. чем он может быть медленнее другого пхп кода мне не понятно)))
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 25 июля 2010 г. 13:27, спустя 3 минуты 15 секунд

    видимо не понравилось человеку предложение "выкинуть его шаблонизатор".

    если бы ты хоть чуть чуть знал человека, то такую глупость бы не написал. мне абсолютно похуй кто и что использует, я ни копейки с этих всех шаблонизаторов и прочей ереси не получил, и чем меньше ктото использует мое чтото - тем меньше меня дергают непрофитными вопросами :)
    Спустя 46 сек.
    soulgarden, не парься, просто очередной упертый sap попался)))) но этот сап не особо опытный дополнительно, вот и мысли глупые лезут в голову :)
    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!