F3: маленький PHP-фреймворк с огромными возможностями



    Хочу представить вашему вниманию легковесный PHP-фреймворк, на который я недавно наткнулся и который сразу же полюбил.

    Fat-Free чем-то похож на известный Ruby-фреймворк Sinatra. Автор Fat-Free помешан на минимализме и чистоте кода, что положительно отразилось на этом простом каркасе для разработки самых разнообразных приложений.

    Fat-Free состоит из одного файла и весит всего 55KB. При этом фреймворк обладает таким функционалом: специфический и довольно удобный шаблонизатор, гибкое кеширование, автоматическая защита от спама, интегрированные средства для юнит тестов, профайлер кода.

    Он настолько маленький и быстрый, что даже может использоваться для контроля траффика Web-сервера.

    Это, также, единственный фреймворк, который защищает Ваше приложение от хотлинкинга и DoS атак.


    Неважно, новичек Вы или профессиональный PHP-программист, Fat-Free простой в использовании и одновременно мощный. Он не требует инсталяции или четкой структуры директорий. Данный фреймворк позволяет писать приложения как в объектно-ориентированном так и процедурном стилях. Философия Fat-Free и ее подход к MVC-архитектуре стремятся к минимализму структурных компонентов, избежанию сложности и балансу между элегантностью кода, производительностью приложения и продуктивностью программиста.

    Fat-Free поставляется с плагинами, которые помогут расширить возможности фреймворка:

    • Auto-mapping ORM под названием Axon, которое автоматически определяет поля таблицы в базе данных и создает для них соответствующие объектные переменные;
    • M2 для работы с MongoDB;
    • Обработчик форм;
    • Генератор капч;
    • Компрессор JavaScript и CSS;
    • Динамический генератор XML карты сайта
    • Генератор миниатюр и псевдо-изображений;
    • Identicons;
    • Авторизация;
    • Гибкая система журналирования;
    • Средства для коммуникации с другими серверами;
    • Обработка ZIP архивов;
    • Функции для работы с API Google, Twitter, Yahoo! и Akismet;
    • Поддержка мультиязычности.


    Вот так выглядит файл, который отображает приветствие на главной странице:
    1. require_once 'path/to/F3.php';
    2. F3::route('GET /','home');
    3. function home() {
    4.     echo 'Hello, world!';
    5. }
    6. F3::run();
    7.  

    Приступаем к работе


    Внимание: для работы фреймворк нуждается в версии PHP не ниже 5.3 а также в установленном и настроенном mod_rewrite!

    Чтобы не делать данное руководство слишком громоздким я решил избежать написания дизайна и некоторых очевидных функций для нашего простого приложения — гостевой книги.

    Для начала создайте базу данных любым удобным для Вас способом. В качестве БД могут выступать как SQLite/MySQL так и MongoDB. Поскольку приложение — показательное и простое, я выбираю SQLite.

    В моей базе guestbook.sqlite всего одна таблица — Comments, которая содержит поля id, author и comment.

    Создайте в корне Вашего приложения файл index.php и переименуйте файл htaccess в .htaccess (с точкой впереди).

    Далее подключите в index.php главный и единственный файл фреймворка и определите путь к базе данных:
    1. require_once('F3/F3.php'); //подключение фреймворка
    2.  
    3. F3::set('DB',array('dsn'=>'sqlite:guestbook.sqlite')); /* Инициализация подключения к БД.
    4. Внимание: если у Вас версия sqlite = 2, DSN должен выглядеть так:
    5. 'dsn'=>'sqlite2:guestbook.sqlite'
    6.  */

    В первом примере, где выводится сообщение Hello World Вы увидели один из способов обработки роутов (путей). На самом деле их несколько и Вы свободны выбирать:

    1. Функция-обработчик роута — как в первом примере. Вторым параметром метода F3::rote() указываем функцию, которую описываем в этом же файле, в любом месте

    2. Анонимная функция во втором параметре метода F3::rote():
    1. require_once 'path/to/F3.php';
    2. F3::route('GET /',function () {
    3. echo 'Hello, world!';
    4. });
    5. F3::run();

    3. Статический метод класса в том же втором параметре:
    1. require_once 'path/to/F3.php';
    2. class MyClass {
    3.     public static function hello() {
    4.         echo 'Hello, world!';
    5.     }
    6. }
    7.  
    8.  
    9. F3::route('GET /','MyClass::hello');
    10. F3::run();
    11.  

    4. Обычный метод класса:
    1. require_once 'path/to/F3.php';
    2. class MyClass {
    3.     public function hello() {
    4.         echo 'Hello, world!';
    5.     }
    6. }
    7.  
    8. $test = new MyClass;
    9.  
    10. F3::route('GET /',array($test,'hello'));
    11. F3::run();
    12.  

    5. И наконец обработчиком может быть отдельный файл, расположенный в произвольной директории с другими такими же файлами. Директорию с файлами-обработчиками необходимо объявить в начале файла index.php, после чего можно вызывать файл-обработчик роута:
    1. //index.php:
    2. <?php
    3. require_once 'path/to/F3.php';
    4. F3::set('IMPORTS','yourpath');
    5. F3::route('GET /',(:yourfile));
    6. F3::run();
    7.  
    8. //yourpath/yourfile.php
    9. <?php echo 'Hello World!'; ?>

    Продолжим разработку гостевой книги. В файле index.php добавьте путь к файлам плагинов — это нам нужно для использования ORM под названием Axon, которое поставляется вместе с Fat-Free:
    1. require_once('F3/F3.php');
    2. F3::set('AUTOLOAD','autoload/'); /*установка пути к плагинам.
    3. По умолчанию папка с плагинами называется autoload.
    4. Вы можете переименовать её и вынести за пределы корня сайта для большей безопасности.*/
    5. F3::set('DB',array('dsn'=>'sqlite:guestbook.sqlite')); 

    Добавьте обработку запроса главной страницы одним из вышеописанных способов. Я выбираю первый, как самый наглядный.
    1. require_once('F3/F3.php');
    2. F3::set('AUTOLOAD','autoload/');
    3. F3::set('DB',array('dsn'=>'sqlite:guestbook.sqlite')); 
    4. F3::route('GET /','home');
    5. function home() {
    6. $comments = new Axon('comments'); //подключение к таблице comments БД
    7. $all_comments = $comments->find(); // Извлечение всех комментариев
    8. foreach ($all_comments as $comment) { /*  Обход всех результатов в массиве
    9.  и последуюющее их отображение. Напомню, что в данном примере
    10.  я пишу минимальный код без проверок на ошибки. */
    11. echo 'Автор: '.$comment['author'].'<br />';
    12. echo 'Комментарий: '.$comment['comment'].'<br /><br />';
    13. }
    14. }

    Ну вот. Отображение комментариев уже работает. Можно переходить к добавлению. Но прежде я хочу немного рассказать о шаблонах.

    Путь к шаблонам устанавливается тем же методом, что и другие:
    1. F3::set('GUI','путь к шаблонам');

    Передать переменную в конкретный шаблон – нельзя. Переменные в Fat-Free устанавливаются для всего приложения. Это делается с помощью уже знакомого статического метода:
    1. F3::set('переменная','значение');

    Теперь эта переменная доступна везде. В HTML-коде и строковом виде её значение вызывается как {@переменная}, в PHP-коде как:
    1. F3::get('переменная');

    Для вызова шаблона следует использовать метод serve:
    1. F3::serve('template.html');

    Таким образом мое приложение теперь имеет вид:
    1. //index.php:
    2. <?php
    3.  
    4. require_once('F3/F3.php');
    5. F3::set('AUTOLOAD','autoload/');
    6. F3::set('DB',array('dsn'=>'sqlite:guestbook.sqlite'));
    7.  
    8. F3::route('GET /','home');
    9. function home() {
    10. $comments = new Axon('comments'); //подключение к таблице comments БД
    11. $all_comments = $comments->find(); // Извлечение всех комментариев
    12. F3::set('comments',$all_comments);
    13. F3::serve('template.html');
    14. }
    15.  
    16. ?>
    17.  
    18. <!-- template.html -->
    19.  
    20. <F3:repeat key= “{@key}” index="{@comment}" group="{@comments}">
    21.         <p>{@comment.id}</p>
    22. </F3:repeat> 

    В данном примере видно как работает шаблонизатор Fat-Free: в цикле обрабатывается переменная, в которой содержатся все комментарии.

    Следующий этап – добавление формы комментариев на страницу. Для этого, сначала опишите саму форму в файле form.html, размещенном в папке с шаблонами. В моем случае форма выглядит так
    1. <form method='post' action='{PARAMS.0}'> <!-- PARAMS.0 содержит текущий адрес -->
    2. <input type='text' name='author'/>
    3. <input type='text' name='comment'/>
    4. <input type='submit'  />
    5. </form>

    Далее необходимо загрузить данную форму внутри существующего шаблона главной страницы, чтобы под всеми комментариями отобразить форму. Для этого внутри шаблона template.html используйте тег шаблонизатора <F3:include href=«form.html»/>. Напомню, что файл form.html должен находиться в той же директории, что и template.html

    Сейчас у Вас должен возникнуть вопрос — как обработать отправленные данные? Все просто. Объявите в файле index.php обработчик для метода POST главной страницы:
    1. require_once('F3/F3.php');
    2. F3::set('AUTOLOAD','autoload/');
    3. F3::set('DB',array('dsn'=>'sqlite:guestbook.sqlite'));
    4.  
    5. F3::route('GET /','home');
    6. function home() {
    7. $comments = new Axon('comments'); 
    8. $all_comments = $comments->find();
    9. F3::set('comments',$all_comments);
    10. F3::serve('template.html');
    11. }
    12.  
    13. F3::route('POST /','savecomment');
    14. function savecomment() {
    15. $comments = new Axon('comment');
    16. $comments->copyFrom('REQUEST'); /* Если названия полей формы
    17. соответствуют названиям полей таблицы,
    18. нет необходимости присваивать каждое значение отдельно.
    19. Можно воспользоваться удобной функцией copyFrom
    20. и получить данные из переменной $_REQUEST */
    21.  
    22. /* ...
    23. * тут добавьте обработку полученных данных
    24. */
    25.  
    26. $comments->save(); // добавление в базу данных
    27. $F3::reroute('/'); // переадресация на главную страницу
    28. }
    29. ?>

    Ну вот и все. Минимальная гостевая книга готова. Это заняло около 30 строк кода!

    Сайт фреймворка
    Загрузить последнюю версию Fat-Free
    Поддержка
    IRC канал на irc.freenode.net: #fatfree
    Автора фреймворка зовут Bong Cosca. Тут находится его блог.
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 102

      –14
      Очень интересно, спасибо за статью.
        +14
        Начал читать, дошёл до строчки
        Fat-Free состоит из одного файла и весит всего 55KB.

        И чуть было не закончил тут же. Мол, что можно втиснуть в такой объём. Какой же это фреймворк. Но пошёл читать дальше. Описание плагинов подняло планку. Подумал, что вполне можно приспособить для дописывания мелкого функционала мелким сайтам, которым не счёл нужным ставить CMS на БД. Увидел требования: 5.3. Нет, к мелким сайтам приспособить не получится.
        Не удержался, сунул нос в код. Хороший код, технологичный. Есть чему поучиться. Но в целом рассматривать как фреймворк эту штуку не могу.
          +6
          в каком то из номеров phpinside было что самый примитивный фреймворк это <?php include_once($_GET['q']);?>
          гдето в интернетах я уже описывал типы фреймворков… повторюсь более кратко
          разделим фреймворки по размеру на
          — громадные zf, symfony 1, yii, кохана
          — ядерные фреймворки nicedog, f3, frogcms (внутри очень прикольный фреймворк есть), symfony 2
          — нано twitto.org

          ядерные фреймворки это unix way, но php разработчики предпочитают windows way — поэтому у php очень слабо развит pear, как следствие большое «дублирование» реализаций

          чем больше фреймворк — тем больше приходиться тратить времени на его изучение, он имеет большее количество спорных моментов и больше мест которые могут «не подойти» под конкретный проект (тут валидация лучше, там orm, а в другом mvc удобнее)
          55кб можно прочитать за день (внимание: код нужно читать прежде чем использовать)
            +1
            Зенд, как раз, изначально не является «громадным», это всего лишь набор библиотек, при этом с его мвц можно легко использовать сторонние шаблонизаторы/орм и т.д. Кстати, давно есть желание разбить его на пиар пакеты, может руки дойдут, но уже скорее ко 2ой версии.
              0
              Во 2-й версии pear-пакеты, вроде как, будут из коробки. Совсем недавно было довольно интенсивное обсуждение этого в zf-contributors листе.
              0
              Выступлю против причисления Kohana к «громадным» ибо поизучав множество фреймворков пришел почти к противоположному выводу — размер Коханы (обычно на выходе это 100-110 небольших мерженых файлов включая заглушки и модули) крайне мал для того функционала, что он дает (причем большую часть этого функционала так или иначе придется подключать к «миниатюрным фреймворкам» в виде плагинов/хелперов/etc).

              Хотя тут выше написали, что код хороший — надо глянуть…
                +3
                Термин «громадный» применительно к Kohana звучит как комплемент :)
                +2
                Кстати по поводу «прочитать за 1 день» — на понимание (не «чтение») такого кода уйдет не 1 день… Стиль написания, на мой(!) взгляд, ужасен.
                  0
                  да нормально написано, за 1 день действительно можно понять что делает каждый метод и как его использовать
                    +1
                    Я же не зря выделил, что это лишь моя точка зрения. Просто я привык к более аккуратно оформленному коду Ko3 и после него читать такой код хотя и возможно, но весьма проблематично… Для меня это как чтение production и development версии jQuery (не настолько, конечно, но что-то в этом роде)…
                  +1
                  «php разработчики предпочитают windows way»
                  А пацаны то и не знают.
                    +1
                    У них самих собственная классификация: Nice Dog is a nano web framework for PHP, f3 судя по всему можно сюда же. А то, что вы отнесли к «нано», я бы записал в «фан»
                    +1
                    Что вы тогда скажете про twitto.org/ :)
                      +6
                      use F5, stupid.
                      0
                      Кстати, да. Не зря читали дальше

                      fatfree-1.3.24.zip (325.8 KB)
                        +3
                        В этом архиве кроме фреймворка также размещены плагины, примеры, руководства в pdf и chm.
                          0
                          Ну так да, все аттрибуты полноценного фреймворка, а 55кб — это ядро.
                            +1
                            ну да, а размер ядра у «огромного» Yii — 230Kb. Только вот функционал очень даже разнится. экономия на спичках, особенно если с комплилятором использовать.
                              0
                              Ух ты, а что PHP уже компилируется?!
                              Я думал максимум транслируется в байт-код :)
                              0
                              а писать, судя по примерам, очень даже запарно будет, особенно годика через пол когда вернешься к коду поправить какой-то блок.
                        0
                        добавил в избранное, интересный фреймворк
                          0
                          Очень интересно, но то как выглядит код на нем — не нравится. Хотя минимализм и легкость это и нивелируют. Имеет право на жизнь, спасибо автору статьи и автору самого фрэймворка!
                            +1
                            Не уверен о котором коде Вы говорите — о том, что я привел в пример, или Вы примеры на сайте смотрели.
                            Я привел в пример самый простой и самый примитивный способ!
                            На самом деле фреймворк очень гибкий. Можно использовать лейауты, можно в несколько движений прикрутить свои, или уже существующие классы, например, для валидации пришедших от пользователя данных.
                            Тут есть хорошие примеры работающих приложений:
                            sourceforge.net/projects/fatfree/files/
                              –1
                              Конечно же я о Вашем коде в статье. Наверное можео писать код, который и будет мне больше по душе, но блин мне не охота изучать примеры, уж извините, кода в сети много. Много достойных фрэймворков, но… нет сил и времени все изучить.Надеюсь кто-то более терпеливый чем я и полезет изучать код примеров, но мне кода и на работе хватает. В общем охотно верю что можно писать боле красивые кончтрукции...:)
                                +1
                                красиво код выглядит на Mojolicous — mojolicious.org
                                Ищу что-то похожее на PHP, но к сожалению ничего нету
                            +4
                            Интересная штуковина, но язык шаблонов, честно говоря — отталкивает.
                              +5
                              F3::route('GET /','home');
                              function home() {
                              Странно, если требуется PHP 5.3, почему бы не создавать Closure и не работать с ним? Зачем эти уродливые функции в глобальной зоне видимости?
                                +4
                                Почитайте пожалуйста дальше. Ниже я привел несколько возможных способов для объявления роутов. А эти функции в глобальной зоне видимости действительно уродливе :) И удерживаюсь от такого стиля. Хотя он имеет право на существование. Например, если Вам нужно в лейаут подгружать разный статичный контент — два роута, одна функция и все готово.
                                  +2
                                  Я не понял почему в случае использования Closure нельзя использовать два роута и одну функцию?
                                    0
                                    И в способах объявления роутинга нет примера с анонимной функцией.
                                      0
                                      Смотри п.2 в разделе «Приступаем к работе»
                                        0
                                        Да, теперь появилась. Это хорошо.
                                      +1
                                      Да, lambda ф-ция смотрелась бы интересней в вашем примере
                                    +2
                                    Так и хочется добавить: «Фреймворк настолько быстрый, что напишет сайт за вас, пока вы только будете думать над его реализацией» :-)

                                    Интересно, но только для маленьких сайтов с простой структурой, иначе логика на 20-30 роутов будет напоминать кашу.

                                    P.S. Ждем фреймворка F5.
                                      0
                                      Не напоминает :) Серьёзно, всё растаскано по контроллерам :)
                                      +2
                                      Для меня толстоват :-)
                                      • UFO just landed and posted this here
                                          0
                                          И у обоих клиентов одни и теже свои «наборчики» багов :)
                                            0
                                            Один из главных плюсов фреймворка — это то, что несколько программистов могут одновременно работать над проектом. А когда у каждого свои «наборчики», то кроме вас с ними работать никто не сможет (не захочет).
                                            +1
                                            Какой-то странноватый код у него.
                                            Вопрос, кстати, а если мне нужно будет извлечь не все поля из таблицы комментариев, то как?
                                            Или у меня в таблице комментариев только id юзера, ники в другой таблице, есть методы объединения, или запрос писать придётся?
                                              0
                                              Вот небольшой пример
                                              $frequentUsers=$user->find('visits>3','userID');

                                              На счет объединения не уверен. Но если нужно установить связи между таблицами — разве что только на уровне БД или писать собственный класс.
                                                0
                                                Ну конечно, на Ruby такой код пишут уже давно…
                                                  0
                                                  Есть объединение. Нечто вроде INNER JOIN
                                                  А можно вообще голый запрос писать
                                                  +5
                                                  > Это, также, единственный фреймворк, который защищает Ваше приложение от хотлинкинга и DoS атак.
                                                  каким это образом?
                                                    0
                                                    На счет хотлинкинга — похоже, обычная проверка реферера, я еще не копался в этой части кода.
                                                    На счет DoS, в некоторый момент фреймворк проверяет ip пользователя в глобальных блек листах (гляньте тут: www.dnsbl.info/dnsbl-list.php).
                                                    Если переменная SPAM не установлена, фреймворк редиректит плохого пользователя на 404 страницу. Если в этой переменной есть адреса, то все плохие пользователи будут редиректиться на эти адреса.
                                                      +2
                                                      похоже, данные фичи добавили, чтобы фреймворк не казался совсем уж тощим :)
                                                      польза крайне сомнительная
                                                        +5
                                                        Этим должен заниматься nginx, на худой конец апач, но никак не php скрипт.

                                                        Не вводите в заблуждение, никакой фреймворк по определению не может защищать от DDoS атак. Быстрая работа всех страниц — это и есть защита.
                                                    0
                                                    а кеширование?
                                                      +4
                                                      F3::set('CACHE','apc'); или
                                                      F3::set('CACHE','xcache'); или
                                                      F3::set('CACHE','folder=tmp/');

                                                      После чего кешируем нужную страницу на одну минуту:
                                                      F3::route('GET /mypage','mypagefunc',60);
                                                      +4
                                                      Интересно, зачем он в конце каждого файла пишет "?>" и перенос строки после него
                                                        +3
                                                        oldschool :)
                                                          0
                                                          Перенос строки в конце файла это хорошо.
                                                          –4
                                                          по-моему, лучший — CodeIgniter, мне так понравилась его реализация модели MVC со всякими дополнительными хелперами, хуками, плагинами и т. д., что даже не обращаю теперь внимания на другие фреймворки.
                                                            +6
                                                            даже не обращаю теперь внимания на другие фреймворки.

                                                            А это зря, нужно изучать и смотреть разные решение одних и тех же проблем. Я раньше тоже так думал о CI, но сейчас уже использую Zend.
                                                            –1
                                                            Напомнил sinatra
                                                              +1
                                                              На web.py вроде бы похож.
                                                                –9
                                                                Есть множество хороших фреймворков. Мне в своё время оч нравился Kohana.
                                                                И вот в один прекрасный день, зайдя на их сайт увидел в новостях нечто такого смысла: пожалуйста, кидайте донат, а то проект без этого не сможет развиваться да и за хостинг нужно заплатить.

                                                                После этого сразу и безвозвратно переметнулся на ZF.
                                                                Я-то свой donate бросил, но не хочется зависеть от щедрости других и осознавать, что в любой момент это прекрасное начинание может умереть.

                                                                А ZF, если и умрет, то только вместе с php — а это случится не скоро.
                                                                • UFO just landed and posted this here
                                                                    0
                                                                    Народ помешался, и Украина тут не при чём. Вот если бы хоть бы кто-то перестал пафосно называть свои поделки фреймворками, а честно признался бы что «я написал кусок говнокода» то хотя бы за честность кто нибудь да плюсанул бы =)
                                                                    • UFO just landed and posted this here
                                                                        0
                                                                        Переход на личности, лишь попытка не признаваться в отсутствии аргументов, увы она говорит за себя сама…

                                                                        Но коли вы «читали» всё-же «мой сайт» то могли бы и заметить что это «затычка» на бесплатном хостинге для ламеров которые бегают по ссылкам в профилях (обычно на форумах) в поисках чуда

                                                                        (вирус кстати вставляет хостер, как и заголовки неверной кодировки, и начали они это делать через 4 года после того как я его забросил)
                                                                        • UFO just landed and posted this here
                                                                            0
                                                                            Хорошо, напросились сами. Глянем в любой файл F3 (я уж про название не говорю, но допустим что название с его сокращением навязано маркетологом)

                                                                            Куча тернарников, никаких пробелов, отсутствие скобок для «однострочных» условий, я так писал в том самом 2004-м году когда впервые свой первый говносайт сделал, дебаг превращается в «квест — догадайся что афтор имел в виду», если это не говнокод, то что тогда говнокод?

                                                                            А мой уровень вообще не имеет значения, ибо не нужно быть профессором математиком чтоб знать что 2х2 не будет равно 5
                                                                    0
                                                                    столкнулся с проблемами когда приложение написанное с использованием этого фреймворка находиться не в корне сервера, а в поддиректории. Пришлось немного хитрить, а так то довольно неплохой инструмент.
                                                                    0
                                                                    я тут django переписываю на php :) кому интересно — стучите в аску/скайп (особенно если вы знаете как устроены внутренности django.db.models, есть вопросы...)
                                                                    — я и мой сраный фреймворк [x]
                                                                      0
                                                                      Предлагаю начать сразу с рельсов. Так будет интересней ))))
                                                                        0
                                                                        уже довольно много сделано, к тому же рельсы мне пока не интересны.
                                                                          +1
                                                                          Ирония — не значит издеваюсь )))

                                                                          В общем, удачи в начинаниях…

                                                                          P.S.… но все равно не понятно, чем питон плох.
                                                                          P.P.S «рельсы мне пока не интересны» — а вы их пробовали?
                                                                            0
                                                                            Питон всем хорош и очень мне нравится, но пока уровень его знания не позволяет делать что-то серьезное + хочется иметь такой же удобный инструмент и на пыхе.

                                                                            Рельсы смотрел поверхностно, просто питон с джанго мне больше пришлись по душе )
                                                                            Я планирую подробнее изучить руби/рельсы, но только после питона/джанго
                                                                              0
                                                                              Время переписки django на php < время изучения питона?

                                                                              Мне действительно интересно — нафига?

                                                                              Нет, если спортивный интерес, тогда понятно.
                                                                                0
                                                                                я вот предвидел этот вопрос :)

                                                                                — потому что работать намнооооого чаще приходится с пыхом, +спортивный интерес.
                                                                        +3
                                                                        django на php будет уже не то.
                                                                          0
                                                                          pluf.org смотрели?
                                                                          –2
                                                                          Быть может после Ko3, а может и нет, но код F3 просто ужасен в своей читабельности… Хотя бы на пробелах в выражениях с тернарными операторами можно было не экономить?!!!
                                                                            +1
                                                                            «Если названия полей формы соответствуют названиям полей таблицы, нет необходимости присваивать каждое значение отдельно.»

                                                                            — Что удобно — оно понятно… А насколько это безопасно?
                                                                              0
                                                                              Размер фреймворка напомнил об этом:

                                                                              На настоящий момент времени существуют несколько вирусов длиной 59 байтов. Вот цитата из каталога Игоря Данилова:

                                                                              Viking.59

                                                                              В настоящее время данный вирус является мировым рекордсменом среди самых маленьких резидентных файловых вирусов, сохраняющих работоспособность инфицированных программ. Является усовершенствованной модификацией вирусов Dinky, но с использованием пары неплохих приемов.

                                                                              Сам же Игорь Данилов является автором сверхкоротких вирусов серии Dinky. Существуют Dinky.59, Dinky.56 и… по уверениям самого Данилова — Dinky.52!

                                                                              drmad.chat.ru/virus1.htm
                                                                                0
                                                                                Как минимум интересная штука это F3.
                                                                                Меня заинтересовал раздел «Bandwidth Throttling» в описании. Посмотрите, кто что думает, насколько это эффективно?
                                                                                Защитит от DoS, но вот чем это поможет от DDoS не ясно.
                                                                                  0
                                                                                  Есть еще micromvc.com/, тоже около 50кб насколько я помню
                                                                                    0
                                                                                    Как по мне стиль кода ужасен, плохо читаем. Порадовало хранение натроек:
                                                                                    if (preg_match(
                                                                                    			'/^(apc)|(memcache)=(.+)|(xcache)|(folder)\=(.+\/)/i',
                                                                                    			F3::$global['CACHE'],$_match))
                                                                                    

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

                                                                                      В мануале написано:
                                                                                      «I Don't Need the Template Engine. PHP is Good Enough!
                                                                                      No problem. Use of the template engine is entirely optional. Just abstain from using the F3::resolve and F3::serve methods.»

                                                                                      Устанавливаю… ничего…

                                                                                      index.php:
                                                                                      $c = array(23,555,7);
                                                                                      // или так
                                                                                      F3::set('c',array(1,2,3,4));
                                                                                      echo( F3::serve('_temp/q.php') );

                                                                                      _temp/q.php:
                                                                                      <?php
                                                                                      print_r( $c );
                                                                                        0
                                                                                        Подключайте темплейт обычным способом, без F3::serve();
                                                                                          0
                                                                                          Т.е. через обычные include/require?
                                                                                          Проверил, так работает.
                                                                                          Но это немного мимо F3…
                                                                                        +1
                                                                                        Говорите что хотите, но eval в коде меня напрягает. как и большое количество регулярок, да в кипе с preg_replace_callback это может привести к падениям в pcre, с чем я много раз встречался (камень в сторону Quicky (: ). Всё можно значительно упростить используя анонимные функции, раз уж требования не менее 5.3. А в целом — свежо.
                                                                                          0
                                                                                          «Fat-Free чем-то похож на известный Ruby-фреймворк Sintara.» — опечатка, всё же Sinatra.
                                                                                            +1
                                                                                            Шаблонизатор стремный, лучше уж native php
                                                                                              0
                                                                                              Это же bottle.py! Спасибо.
                                                                                                –1
                                                                                                А что за интересный такой синтаксис?
                                                                                                F3::route('GET /',(:yourfile));
                                                                                                  +1
                                                                                                  php:)
                                                                                                    0
                                                                                                    Остряк! :))
                                                                                                    Я конкретно про "(:yourfile)". Если этим подразумевается «подставьте своё имя файла» — тогда я впервые вижу такой способ. Пахнет SQL-placeholder'ами :)))
                                                                                                  +1
                                                                                                  Довольно неплохой фреймворк. Местами проскакивают «сомнительные» конструкции, но в целом есть чему поучиться. Спасибо
                                                                                                    0
                                                                                                    Спасибо вам! Давным давно прочитал вашу статью и вот заканчиваю довольно крупный проект на этом фреймворке. Радует он почти всем, есть небольшие косяки, но автор пообещал исправить их в версии 2.0 :) Вообще, готов ответить на вопросы по поводу этого фреймворка. Также не стесняйтесь писать автору — он охотно отвечает :)
                                                                                                      0
                                                                                                      Поделитесь ссылкой на свой проект :)
                                                                                                        0
                                                                                                        Как только закончим — кину в личку)
                                                                                                          0
                                                                                                          Не закончили ещё? =)
                                                                                                          Интересно было бы тоже посмотреть. Ну и вообще, остались верны фреймворку, или на что-то ушли?
                                                                                                            +1
                                                                                                            Поддерживаю вопрос.
                                                                                                            А то лично я ушел на Silex :)
                                                                                                              +1
                                                                                                              Последний проект я делал на собственной связке MVC. Свой велосипед ближе к телу. :) на вопрос ответил ниже
                                                                                                              +1
                                                                                                              Закончил, но пока мы его не запустили :)
                                                                                                              В общем и целом — фреймворк понравился, есть косяки, но я отсылал багрепорты и автор их правил, сейчас на днях он выпускает вторую версию — вот тут уже всё станет понятно)
                                                                                                        0
                                                                                                        Вещь интересная, но:
                                                                                                        зашел на сайт фреймворка, и увидел, что последняя версия выыпущена в 2010 году.
                                                                                                        Забросили похоже, и в связи с этим его использование мне кажется сомнительным в плане развития, чтоли.
                                                                                                          0
                                                                                                          Захожу на сайт: Updated Sunday, 23 January 2011
                                                                                                          Захожу в репозиторий, где код хранится: Last Update 9 hours ago
                                                                                                            0
                                                                                                            В репозитории лежит версия 2.0, которая сейчас активно девелопится.

                                                                                                          Only users with full accounts can post comments. Log in, please.