Анонсирован Zend Framework 3 Roadmap

    imageОбсуждение идей и предложений для Zend Framework 3 идет достаточно давно, и вот наконец Zend решились на анонс новой версии фреймворка.

    Zend Framework 3 будет эволюцией ZF2, с фокусом на три главных момента — простоту, повторное использование кода и производительность.

    В первоочередные планы входит:
    • выделение компонентов фреймворка в индивидуальные, версионируемые проекты (привет, Symfony!);
    • особый упор будет сделан на HTTP сообщения, которые будут приведены в соответствие с PSR-7;
    • существующий full stack MVC фреймворк будет обновлен и начнет зависеть от новых независимых компонентов для повторного использования и упрощения. ZF2 MVC проекты можно будет с минимальными усилиями перенести на новую версию, для чего подготовят гайд по миграции;
    • использование концепции middleware, знакомой многим по Ruby / Python, а так же PHP-фреймворкам Slim Framework и StackPHP, в качестве более легкой альтернативы энтерпрайз-стеку фреймворка MVC (пример того, о чем идет речь);
    • возможность использования Apigility в качестве middleware;
    • оптимизация под PHP 7, при этом будет поддерживаться PHP начиная с версии 5.5;

    А теперь главный сюрприз — серьезная часть мыслительного труда и кодинга осталась позади, поэтому выйдет ZF3 уже в третьем квартале 2015 года.

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

    Похожие публикации

    Комментарии 24

      +4
      Ура, а то притих что-то когда-то любимый фреймворк.
        +4
        Во всех крупных коммерческих проектах используем ZF2, в принципе самый гибкий из доступных фреймворков. Вот если бы из него выкинули Zend\Db, Zend\Form(используем чисто Zend\InputFilter), и т.д. было бы вообще круто. Из-за чего ZF2:
        1. Удобная система модулей (многие модули находятся в отдельных репозиториях, и используются во многих проектах, да и зону ответственности намного проще находить);
        2. Удобный роутинг (не одним Literal и Segment единым, можно спокойно сделать собственные типы роутинга с различными дополнительными проверками (например проверка на существование записи с таким именем в БД));
        3. Удобный EventManager (подписаться на EVENT_ROUTE для определенного класса, для общего предка, или к примеру для одного модуля, к примеру чтобы заменить layout, также можно много всего интересного делать до входа в Контроллер как проверка авторизации, валидация запроса, и т.д.);
        4. Удобный ServiceLocator (Invokables, Abstract Factories, Factories, Callbacks, etc — очень гибко можно это все настроить под себя);
        5. Удобные View'шки (я больше предпочитаю нативные шаблонизаторы, так как php в этом плане справляется со всем сам);
        6. Удобные консольные роуты;
        7.Удобная система конфигов (в начале грузится application.config.php, потом global.php, потом если есть local.php в котором все локальные конфиги прописаны, и они не влияют на остальные, потом по модулям). В итоге получается общий конфиг с особенностями локальной конфигурации.

        Ну и многое другое. Очень много писать на самом деле.
          +8
          Symfony 2 не пробовали?
            +2
            Symfony тоже используем, но все же не все в нем нравится, к примеру:
            1. Конфиги в yaml'е или xml'е, я понимаю, что Symfony — это некий порт Spring на PHP, но в PHP есть отличные массивы для таких нужд, которые намного проще читать, чем yaml либо xml. Да, это субъективное впечатление, но все же нормально использовать массивы в качестве конфига в Symfony сложно (в документации некоторые вещи не предоставляют примера конфига на чистом PHP, в итоге просто привыкаешь);
            2. Assetic — задумка хорошая, в принципе для простых нужд очень удобная, но: если используете requirejs и coffeescript, с включенным файл вотчером, которые компилирует coffeescript, то Assetic чего-то под видом js-а отдает coffeescript файлы, так как он считает что нужно подключить конвертер для этих файлов, либо со стороны php, либо со стороны клиент-сайда. Исправить это смогли только отключив Requirejs Bundle. Таких неожиданностей поведения никто не ожидал;
            3. Очень много кода получается для форм, к примеру мы используем PostgreSQL, и нужно было в select вывести пользователей у которых есть определенный пермишн, пермишины хранятся в json колонке у юзера. В итоге пришлось:
            — добавить NativeQuery над Entity (так как работа с JSON полем в Doctrine нет);
            — описал NativeEntityType для того, чтобы подсунуть NativeQueryLoader;
            — сделали NativeQueryLoader (стандартный не работает с query для PostgreSQL);
            — это все обложил конфигом;

            В ZF2 я бы мог просто в InputFilter передать репозиторий, и при построении Input'а задать ему валидатор: new Validator\InArray($users) и на этом все.

            Да, это все субъективно, Symfony хороший фреймворк, но некоторые вещи в нем не сильно удобно сделаны.
              0
              Понятно. Я раньше тоже ZF2 юзал. Теперь Symfony2. Насчёт конфигов можно же разные форматы использовать, в том числе и на PHP. Как и в ZF2 тоже можно другие форматы.
              • НЛО прилетело и опубликовало эту надпись здесь
                  +4
                  Несколько примеров того, почему это удобнее:
                  1. Массивы парсятся намного быстрее чем yaml, так как это нативная вещь в языке (несколько раз видел как человек import'ами в Symfony зациклил парсинг)
                  2. Работает автодоплнение когда ты пишешь название класса, и ты можешь спокойно перейти в этот класс:
                  К примеру:
                  "service_manager" => [
                      "invokables" => [
                          "api:device" => \Api\Service\Device::class,
                      ],
                  ]
                  

                  И в любой момент можно найти использования с помощью стандартных средств IDE.
                  3. Есть возможность использовать нативные возможности языка, и это часто помогает, к примеру на CI я получаю параметры для базы в виде ENV параметров, и я могу спокойно сделать так:
                      'doctrine' => array(
                          'connection' => array(
                              // Configuration for service `doctrine.connection.orm_default` service
                              'orm_default' => array(
                                  // connection parameters, see
                                  // http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html
                                  'params' => array(
                                      'host' => (getenv('WERCKER_MYSQL_HOST'))?getenv('WERCKER_MYSQL_HOST'):'localhost',
                                      'port' => (getenv('WERCKER_MYSQL_PORT'))?getenv('WERCKER_MYSQL_PORT'):'3306',
                                      'user' => (getenv('WERCKER_MYSQL_USERNAME'))?getenv('WERCKER_MYSQL_USERNAME'):'root',
                                      'password' => (getenv('WERCKER_MYSQL_PASSWORD')) ? getenv('WERCKER_MYSQL_PASSWORD') : 'freeware',
                                      'dbname' => (getenv('WERCKER_MYSQL_DATABASE'))?getenv('WERCKER_MYSQL_DATABASE'):'orm-test',
                                  )
                              ),
                          ),
                  


                  Ну опять же, это все субъективно, да yaml считается человекочитаемым форматом, но нативные массивы не сильно уступают от него
                  • НЛО прилетело и опубликовало эту надпись здесь
                      0
                      1. Насколько я знаю, влияние на произодительность минимально, yaml файлы парсятся только при изменении в дев-режиме. На продакшене парсятся вообще только при очистке кэша или первом запуске.
                      2. В phpstorm с плагином symfony2 все работает. ЧЯДНТ? :)
                      3. Советую пройтить по документации еще раз. Как раз то что вам нужно symfony.com/doc/current/cookbook/configuration/external_parameters.html Просто добавьте переменным окружения SYMFONY__ префикс и они буду доступны в yaml файле. Ну или же используйте
                      imports:
                          - { resource: parameters.php }
                      
                        0
                        1. все конфиги symfony (неважно, yml, xml или php) парсятся только один раз, после чего компилируются в php.
                        на prod режиме это происходит только один раз при очистке кеша (читай деплое)
                        на dev, test и т.п. режимах — только при редактировании файлов с конфигами.

                        2. не в курсе как там с netbeans и прочими vim'ами, но в phpStorm'е есть чудесный плагин, который решает все проблемы конфигов — автодополнение, переход к файлу с классом, подсказка по методам из контейнера и много еще чего.

                        3. никто не мешает вам описать точно также в php-конфигах на симфони. но в целом — согласен, yml формат такого не позволяет
                    • НЛО прилетело и опубликовало эту надпись здесь
                        0
                        SELECT e.* FROM employee e, json_array_elements(e.roles) r WHERE r.value::text = :needRole
                        


                        Это PostgreSQL, она умеет
                        • НЛО прилетело и опубликовало эту надпись здесь
                    0
                    не одним Literal и Segment единым, можно спокойно сделать собственные типы роутинга с различными дополнительными проверками (например проверка на существование записи с таким именем в БД)


                    Вот этого мне так не хватает после друпала, не поделитесь ссылкой на документацию этой возможности или примером?
                      0
                      Вообще я подумываю написать статью о возможностях по кастомизации ZF2, но вот пример моего RouteMatch, для статических страниц с локализацией, лежащих в БД (с путями там же): pastebin.com/iBGqxk8x а вот пример использования этого роута: pastebin.com/dRN3d7Vm

                      Вообще на самом деле ZF очень мощный в плане кастомизации, вот пример моего одного Контроллера: pastebin.com/HQyC6bhV
                      входящие параметры в экшены — это и Entity, и Сервисы, и Фильтры (которые автоматически создаются на основе Entity).

                      К примеру метод create общий для создания и редактирования (оно автоматически определяет оригинальную Entity и инжектит оригинальные данные в фильтр, а потом дополняет полученными из POST).

                      Да, много из этого доступно из-за моей ORM'ки, но ZF позволяет себя расширять очень удобно.
                        0
                        Спасибо, наконец-то нашел пример того что так нужно, а то загружать каждый раз модель в контроллере не очень радует.

                        То что zf очень обширный видно сразу, но проблема в том что есть возможность сделать все уймой разных способов, но нет хорошего и удобного примера.
                    0
                    Zend однако отстал в развитии, мы уже давно в компании используем Symfony 2 и довольны как слоны.
                      0
                      Как мамонты.
                        +5
                        Как мамонты это те, кто на Drupal. :)
                          0
                          Вот не нужно тут про друпал, он конечно не идеальный, но для своих целей очень хорош :)
                            0
                            Извините, не сдержался. :)
                          • НЛО прилетело и опубликовало эту надпись здесь
                        +6
                        Они должны были это сделать.
                        ZF2 был былинным отказом, с грубыми архитектурными ошибками.
                        При существовании Symfony 2 не было причин использовать этот кошмар.
                          0
                          У меня на работе часто начинаются споры между ZF2 и Symfony2 и такие споры длятся не один час. В результате каждый остается со своим мнением. Я считаю что для каждой задачи свой инструмент. Я сам разрабатываю на ZF2 и он мне нравится, но иногда поглядываю и на Symfony 2. Но вот например мой блог на WP. настроить на сервере со всеми SEO плагинами и модулями кеширования у меня ушло до часа времени, и мне там совсем не нужен ZF2 или же Symfony 2. Я этим сообщением хотел сказать что каждый framework или CMS по своему хороши, так сказать у каждого есть свой супер удар :)

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                          Самое читаемое