С пятницей коллеги!
Заинтересовал меня намедни такой вопрос: какой PHP фреймворк вы выберете для создания среднего или крупного проекта (корпоративный портал, магазин и т.п.) в 2016 году?
Уточню, что это не холивар, какой фреймворк лучше, речь идет именно о вашем личном выборе, причины которого, могут быть любыми.
И да, Bitrix это не совсем фреймворк, но тем не менее.
UPD: Подразумевается, что стадия сравнения, споров и выбора уже прошла, и тимлид или команда или бизнес решили: по факту будем писать на этом. Хочется узнать фактический мейнстрим на 2016 год, то есть, что будет на самом деле, а ни этот хороший, а тот плохой.
На каком фреймворке вы будете писать PHP приложение в 2016 году?

Проголосовало 2619 человек. Воздержалось 1264 человека.

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

Комментарии (249)


  1. M-A-X
    01.04.2016 14:28
    -20

    Самопись.
    Не нужно обходить грабли фреймворков и приделывать костыли к велосипеду, чтобы он ехал :)


    1. Fesor
      01.04.2016 14:36
      +12

      приделывать костыли к велосипеду, чтобы он ехал :)

      Как хорошо вы описали работу на самописах. В целом если тесты пишите — то как хотите делайте и на чем хотите. Если же нет — то… для таких людей есть особенное место в аду.


      1. M-A-X
        01.04.2016 14:40
        -5

        > то как хотите делайте и на чем хотите

        А я только за себя и говорю.
        Остальные пусть мучаются с чем хотят. :)
        И да, программирование на фреймворке — это тоже велосипедостроение, когда есть типовые решения для того же корпортала и т.д.


        1. Fesor
          01.04.2016 14:42

          когда есть типовые решения для того же корпортала и т.д.

          типа конфлюенс купить и не париться?


          1. M-A-X
            01.04.2016 14:51
            -1

            Конфлюенс мне не нравится, то ли его не сумели настроить. :)

            Есть какая-то украинская фирма, не помню название, есть SharePoint.


    1. webmoder
      01.04.2016 14:40
      +6

      В итоге вы получаете свой велосипед со своими костылями и граблями, которые также придется обходить.


      1. M-A-X
        01.04.2016 14:46
        -3

        В итоге я получаю Лексус ручной сборки. :)
        Граблей нету, так как я их не расставлял.
        Стараюсь не делать вообще, чем делать костылями.
        В своих проектах костылей не держу.
        К сожалению на фреймворках костыли приходится использовать, так как настаивает заказчик.
        :)


        1. Blast
          01.04.2016 15:05
          +10

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


          1. M-A-X
            01.04.2016 17:21
            -5

            >Вы уверены, что обладаете достаточной квалификацией, чтобы отличить костыль от качественного решения?

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

            >Что не разложили грабли по незнанию либо недосмотру?

            При текущих требованиях граблей нет.
            Когда они появляются при изменении требований, то сразу выпиливаются.
            :)


        1. Fesor
          01.04.2016 15:34
          +13

          В итоге я получаю Лексус ручной сборки. :)

          А ваш клиент платит соответственно, а мог бы получить какой-нибудь опель и ехать а не дом закладывать второй раз.
          Граблей нету, так как я их не расставлял.

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

          А как вы тогда называете "временные решения"?
          К сожалению на фреймворках костыли приходится использовать, так как настаивает заказчик.

          Я прям так и вижу "слушай чувак, мне надо фичу запилить, сделай пожалуйста так что бы кастыль вот в этом месте".


          1. M-A-X
            01.04.2016 17:35
            -2

            > А ваш клиент платит соответственно

            Самопись только для себя. На работе и CMS, и фреймворк. :)
            Гипотетично:
            а) у меня клиенты не нищеброды
            б) себестоимость Лексуса выходит по себестоимости Опеля, а то и ниже :)

            >мог бы получить какой-нибудь опель и ехать

            Вот он уровень фреймворков.
            Хотя скорее получаем подбитый танк для передвижений по городу :)

            >А как вы тогда называете «временные решения»?

            Я не отожествляю временные решения и костыли.

            >сделай пожалуйста так что бы кастыль вот в этом месте

            Нет, я предупреждаю, что, возможно, при таких требованиях будет костыль в таком-то месте.
            Заказчит отвечает обычно: Ну раз никак иначе, то ок.
            :)


    1. Fesor
      01.04.2016 14:40
      +2

      какой PHP фреймворк вы выберете для создания среднего или крупного проекта (корпоративный портал, магазин и т.п.) в 2016 году?

      Абсолютно бесполезная статистика. Намного интереснее было бы посмотреть корреляцию между: предпочитаемым фреймворком, опытом коммерческой разработки, опытом работы в команде, средним размером проекта. Только для размера проекта надо метрики еще выдумывать.

      Я же маленькие личные проекты я скорее буду делать на Ayres шутки ради, а коммерческие — symfony.

      p.s. ошибся веткой.


      1. bardex
        01.04.2016 14:52
        +2

        Вопрос "какой фреймворк лучше" почти каждый день спрашивают на тостере, это неизменно приводит к холивару. А в данном голосовании вопрос задан: на каком фреймворке вы будете писать приложение, т.е. подразумевается, что стадия сравнения, споров и выбора уже прошла, и тимлид или команда или бизнес решили: по факту будем писать на…
        И речь в голосовании идет именно о средних и крупных проектах, маленькие личные — ни в счет.
        Хочется узнать фактический мейнстрим на 2016 год, то есть что будет на самом деле, а ни этот хороший, а тот плохой.


        1. Fesor
          01.04.2016 14:58

          Тут выборка не репрезентативна. Вы выберите "мэйнстрим по мнению остатков хабравчан". Именно по этому меня лично больше интересует корреляция "выбор фреймворка" — "опыт в коммерческой разработке" — "опыт командной разработки". Это позволяет чуть по другому взглянуть на тренды. Мол Laravel и Yii выбирают в основном новички, более опытные чуваки сидят на Symfony, Zend. Есть хипстота которая не использует фреймворки, а так же опытные дядьки которые на компонентах собирают свои фреймворки под конкретную задачу.
          Мэйнстрим — это бесполезная штука.


        1. Big_Shark
          01.04.2016 15:09

          Тогда вопрос как мне кажется не очень корректно задан, так как на работе я буду писать на symfony2, а для себя на laravel5. И я подумал что спрашивают именно про меня и про мои предпочтения, и я ответил laravel5.


          1. bardex
            01.04.2016 15:13

            нормально, если вы пишите средне-крупный проект, для статистики подойдет, вы же тоже наверняка прошли стадию сомнений/выбора.


          1. Fesor
            01.04.2016 15:35
            +2

            Ты пишешь для себя средне-крупные проекты? Как-то сомневаюсь.


            1. Big_Shark
              01.04.2016 17:54

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


        1. Delphinum
          01.04.2016 17:35

          подразумевается, что стадия сравнения, споров и выбора уже прошла, и тимлид или команда или бизнес решили: по факту будем писать на

          В статистике интересна не итоговая цифра, а именно корреляция, о чем и говорит товарищ Fesor.


      1. claygod
        04.04.2016 16:12

        Я же маленькие личные проекты я скорее буду делать на Ayres шутки ради

        Раз уж упомянули, то расскажите подробней об этом фреймворке.


        1. Fesor
          04.04.2016 16:37

          Ну это фреймворк-пример, собранный из разных компонентов вокруг проекта amphp. По сути этот не фреймворк даже, а просто http/websocket сервер на php, построенный на корутинах. Что-то типа node.js + async/await. В рамках этого проекта уже реализованы библиотеки для удобной неблокируемой работы с сокетами, http, есть неблокирующие mysql и psql драйвера и т.д.

          Если вы помните такой проект как reactphp — то тут примерно то же самое, но можно писать в синхронном стиле за счет использования корутин и промисов. Никаких колбэков.


          1. DenQ
            04.04.2016 16:51
            -4

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


            1. webmoder
              04.04.2016 17:18
              +2

              интересно, а если речь о SASS/SCSS заходит то вы сразу на Ruby начинаете писать?


              1. DenQ
                04.04.2016 17:36
                -4

                Интересно, а вы и сокеты будете на PHP подымать?
                И вообще, причем тут SASS?
                Нужно понимать, что для каждой задачи свой интрумент!
                А то сейчас еще найдутся умельцы, которые на php, ОС напишут.


                1. baltazorbest
                  04.04.2016 17:52

                  То есть, Вы хотите сказать что если язык развивается и на нем можно новые вещи делать то это плохо и все равно нужно другой инструмент брать?


                  1. DenQ
                    04.04.2016 18:13
                    -2

                    Вы уверены, что не путаете развитие языка с развитем интрументов?
                    Просто, я как-то не заметил развития php в сторону асинхронности.
                    А вот разные, сторонние костыли пытающиеся реализовать асинхронность, многопоточность, вокруг брокеров сообщений(опять же сторонних) — развиваются.


                    1. Fesor
                      04.04.2016 18:44

                      Просто, я как-то не заметил развития php в сторону асинхронности.

                      yield и корутины доступны в php с 2012-ого года, реализация event loop итого дольше. stream_select — с версии 4.3. Что еще нужно?
                      А вот разные, сторонние костыли пытающиеся реализовать асинхронность

                      это называется распределение задач по обработчикам, никаких "кастылей", просто возможность гибко масштабироваться. Сегодня мы держим все воркеры в одном процессе, а завтра этим занимается класстер. Или MPI предлагаете юзать?


                      1. bardex
                        04.04.2016 18:56

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


                        1. Fesor
                          04.04.2016 19:05
                          +2

                          Это по научному называется "мультиплексирование потока выполнения".

                          Если мы например возьмем go и его горутины, но внутри это будет все те же корутины, просто пул оных будет разнесен еще и по нескольким потокам. Это нужно для минимизации эффекта переключения контекста, то есть производительность при сотне полноценных тредов будет сильно ниже чем корутины + малое количество тредов.

                          Собственно точно так же работает nginx, где в каждом воркере запущен event loop, который работает точно так же как корутины. Профит от корутин в сравнении с обычным event loop в том что мы можем писать код абсолютно в синхронном стиле без единого колбэка. Пример:

                          <?php // basic server
                          
                          require __DIR__ . '/vendor/autoload.php';
                          
                          use Amp as amp;
                          use Amp\Socket as socket;
                          
                          amp\run(function () {
                              $socket = socket\listen("tcp://127.0.0.1:1337");
                              $server = new socket\Server($socket);
                              echo "listening for new connections ...\n";
                              while ($client = (yield $server->accept())) {
                                  amp\resolve(onClient($client));
                              }
                          });
                          
                          // Generator coroutine is a lightweight "thread" for each client
                          function onClient(socket\Client $client) {
                              $clientId = $client->id();
                              echo "+ connected: {$clientId}\n";
                              while ($client->alive()) {
                                  $data = (yield $client->readLine());
                                  echo "data read from {$clientId}: {$data}\n";
                                  $bytes = (yield $client->write("echo: {$data}\n"));
                                  echo  "{$bytes} written to client {$clientId}\n";
                              }
                              echo "- disconnected {$clientId}\n";
                          }

                          Это простенький echo-сервер на PHP написанный с использованием корутин. В C# есть еще более удобная штука, async/await, которая по сути является сахаром над корутинами. В javascript например оно заимплеменчено в рамках es2016.


                          1. bardex
                            04.04.2016 19:29

                            спасибо


                      1. DenQ
                        04.04.2016 19:03
                        -1

                        Ок. И как по вашему `yield` относится к асинхронности?
                        Генераторы и итераторы не имеют отношения к асинхронности или многопоточности. Они вообще о другом.

                        event loop. Да есть. Но это еще не асинхронность. У него немного другая задача. Но да, ускорить можно согласен.

                        stream_select. Вы серьезно? Вы еще форки вспоминте. Это вообще не юзабельно.
                        1 из 10К пэхапешников имел опыт и честь отважно этим пользоваться.

                        Не так просто существует устойчивое мнение, что в php нет асинхронности и многопоточности.
                        Пока что нет. Как будет, я очень обрадуюсь.


                        1. Fesor
                          04.04.2016 19:12
                          +2

                          Ок. И как по вашему `yield` относится к асинхронности?

                          Точно так же, как и event loop в node.js собственно. Принцип работы — идентичный.
                          Генераторы и итераторы не имеют отношения к асинхронности или многопоточности. Они вообще о другом.

                          Они позволяют контролировать и прерывать поток выполнения так как хочется того разработчику. В приведенном вами примере с нодой генераторы используются для реализации полифила async/await например.
                          event loop. Да есть. Но это еще не асинхронность.

                          Дайте определение где настоящая честная асинхронность. Треды в PHP есть, но использовать треды в web в 90% случаев не имеет смысла. Golang и его горутины — это пулы корутин раскиданные по отдельным потокам и там как бы тоже не совсем честная асинхронность, хоть уже и ближе. Но мы так же можем запустить n процессов воркеров со своими пулами корутин, и получим примерно тот же эффект, просто не столь удобно.
                          stream_select. Вы серьезно? Вы еще форки вспоминте. Это вообще не юзабельно.

                          Мне кажется вы просто не знаете что это такое. Эта штука позволяет нам реализовать на низком уровне event loop.
                          1 из 10К пэхапешников имел опыт и честь отважно этим пользоваться.

                          Правильно, потому как это низкоуровневая штука. Все юзают reactphp/amphp.
                          Не так просто существует устойчивое мнение, что в php нет асинхронности и многопоточности.

                          pthreads доступен для php уже лет 10 а то и больше. Так что многопоточность есть. Но давайте учтем такую вещь как переключение контекста и подумаем еще раз — а так ли нужна ли нам многопоточность на бэкэнде.
                          Пока что нет. Как будет, я очень обрадуюсь.

                          Давайте может определимся чего мы хотим достичь. Асинхронность не нужна, нужна "неблокируемость". С этим у PHP все плохо в плане готовых бибилиотек, но проекты типа amphp радуют.


                1. Fesor
                  04.04.2016 18:41
                  +1

                  Интересно, а вы и сокеты будете на PHP подымать?

                  Да, у меня даже опыт такой есть. И в этом нет ничего страшного. Если надо что-то из разряда "стандартное решение" то я конечно же возьму node.js + socket.io, но говорить что нет задач под пых где нужны демоны — это чуть более чем странно.

                  Как бы основная проблема то в том что большая часть библиотек не оч побочные эффекты обрабатывают, и это основная беда похапэшников.


                  1. DenQ
                    04.04.2016 18:52
                    -3

                    У меня тоже был опыт — подымал сокеты, в прошлом году. Могу сказать одно точно — всю работы можно было сделать намного быстрее и проще. Если б можно было в рамках задачи использовать ноду.
                    И да оно падало — признаюсь. Падало но редко. Причину выяснить так и неудалось. В либы брокеров не ходил, не смотрел.
                    На счет демонов — я пока что считаю что пых нужен для того чтобы умирать. Он с этим отлично справляется. Кто в теме поймет.


            1. VolCh
              05.04.2016 09:52

              Чем лучше? Особенно, если на PHP уже реализована мощная модель домена. Переписывать на JS и синхронную часть на асинхронный манер? Поддерживать две модели одного домена на двух языках с, как минимум, разной объектной моделью?


              1. DenQ
                05.04.2016 10:35

                Зачем что-то переписывать?
                Пишем сокеты отдельно, в виде микросервиса. Налаживаем коммуникацию между микросервисом и основным сервисом. Все!
                К чему паника?


                1. Fesor
                  05.04.2016 11:27

                  Собственно я так обычно и делаю, просто потому что у socket-io нет конкурентов особо. И это как бы логично, и даже в случае с PHP делал бы так же (отдельный ws-сервер что бы скейлиться было удобнее).


    1. oxidmod
      01.04.2016 14:40

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


      1. Fesor
        01.04.2016 14:45
        +1

        чтобы не пришлось его преодолевать

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

        При любой нестандартной задаче обычно речь идет о каких-то отдельных компонентах, либо о сложностях с отдельными компонентами которые могут возникнуть если проект выстрелит и не сразу. То есть в первую очередь фреймворк должен нас ограничивать от выстрела в ногу, но давать заменять свои части. Фреймворки уровня zend/symfony/laravel это позволяют делать. Yii скажем — нет, вы полностью завязываетесь на его инфраструктуру, но у этого тоже есть свои плюсы.


        1. oxidmod
          01.04.2016 14:56

          >> Фреймворки уровня zend/symfony/laravel это позволяют делать. Yii скажем — нет, вы полностью завязываетесь на его инфраструктуру, но у этого тоже есть свои плюсы.

          вот потому я и выберу симфони, чтобы по мере необходимости подсовывать свои компоненты


      1. M-A-X
        01.04.2016 14:56
        -2

        Хоть 1 здравомыслящий человек.

        Преодолевать приходится почти во всем, что делаю. :)

        Мне не нравится трактование MVC во фреймворках.

        И некоторые другие архитектурные особенности мейнстримовых фреймворков не нравятся:
        http://blog.kpitv.net/article/frameworks-1/ (статья изначально была написана для хабра, но так инвайт и не получил, https://habrahabr.ru/sandbox/96533/ )

        Задачи то в принципе стандартные, это ж веб, только вот фреймворки их не решают, а решают какие-то надуманные проблемы.


        1. Fesor
          01.04.2016 15:01
          +1

          Мне не нравится трактование MVC во фреймворках.

          Mediating-controller MVC, Model2? Какой из них? Классический MVC не применим в stateless-модели выполнения.

          Мне в этом нравится позиция авторов Symfony:
          I don't like MVC because that's not how the web works. Symfony2 is an HTTP framework; it is a Request/Response framework. That's the big deal. The fundamental principles of Symfony2 are centered around the HTTP specification.


    1. DenQ
      01.04.2016 14:55
      +3

      Вы наверное еще и composer не пользуете?


      1. M-A-X
        01.04.2016 15:02
        -6

        Может и использовал бы.
        Но у меня таких зависимостей нету. :)


        1. DenQ
          01.04.2016 15:24
          +5

          Т.е. слой взаимоейсвия с БД вы пишите сами?


          1. M-A-X
            01.04.2016 15:40
            -14

            Да.
            Мне не нравятся активрекорды, доктрины и прочий мусор.
            Я реализовал API инфоблоков Битрикса для сущностей БД.
            Развелось так званых программистов, не умеющих писать SQL.


            1. DenQ
              01.04.2016 15:43
              +5

              Почему не умеющих?
              Если человек пользует AR это еще не значит, что он не знает SQL.
              Скорее это намекает на его зрелось, как разработчика.
              И тоже самое можно сказать и про др. пакеты и др. языки.


              1. M-A-X
                01.04.2016 15:51
                -6

                Многие вообще считают, что AR — антипаттерн. :)
                Мне лишние дырявые абстракции не нужны. :)


                1. DenQ
                  01.04.2016 15:58
                  +5

                  "Мне лишние дырявые абстракции не нужны"
                  Ну да, лучше свои дырявые абстракции
                  А не те, которые проверены временем


                  1. M-A-X
                    01.04.2016 16:54
                    -2

                    В первую очередь «Мне лишние абстракции не нужны», а уже потом «дырявые» :)


                1. SerafimArts
                  01.04.2016 16:05
                  +2

                  Я тоже считаю, что AR — это некоторый антипаттерн, что не отменяет его как очень эффективную и удобную штуку. А сможете ли Вы на словах объяснить что в нём плохого? ;)


                  1. M-A-X
                    01.04.2016 16:24
                    -5

                    >А сможете ли Вы на словах объяснить что в нём плохого? ;)

                    Не смогу, так как плотно его не использую. Поэтому и написал, что некоторые считают. :)


                    1. SerafimArts
                      01.04.2016 16:35

                      Рассказываю — AR плох тем, что смешивает работу над хранилищем (БД) с работой над моделью, что там пересекаются области ответственности непосредственно сущности и работой с базой данных, что зачастую такая модель монструозна, что… Ну т.е. проблем дофига.

                      Но повторюсь — оно удобно. Можно написать User::getAll() для получения объектов всех пользователей из ресурса (таблицы, в случае с БД) пользователей и не париться. По этому его так называют те, кто смог с ним поработать и понять, что очень жирная модель, приближённая к божественному объекту — это не всегда хорошо. Хотя никто не мешает опять же разделить эти области ответственности, превратив AR модель в своеобразный репозиторий, а энтити иметь кристально чистыми, заточенными под бизнес-логику непосредственно.

                      Вот и все его проблемы.


                      1. DenQ
                        01.04.2016 16:47

                        Простите, а что мешает использовать behaviors, events?
                        Или просто композицию?
                        Тогда модели не будут жирными


                        1. SerafimArts
                          01.04.2016 17:26

                          Эвенты никак не относятся к AR непосредственно (https://en.wikipedia.org/wiki/Active_record_pattern). Задача AR лишь записать и получить модель в бд с указанным состоянием, где объект представляет собой "слепок" состояния таблицы в нужный момент времени, а эвенты лишь следствие этих действий. Я рассказывал о проблемах паттерна в целом, а не способе решения проблем в какой-либо реализации, которая добавляет туда ещё и эвенты.

                          А под композицией я так понимаю имеется ввиду embeddables? Тогда вариант, вполне.

                          Но эти действия не отменяют того, что мы смешиваем с реализацию ($user->name = 'Vasya'), вместо работы с бизнес-логикой ($user->rename('Vasya')). fesor давеча открыл мне глаза на подобную вроде как мелочь, которая в реальности поменяла мою картину мира.


                          1. DenQ
                            01.04.2016 18:03
                            +1

                            Под композицией я имею ввиду тип отношений между сущностями. тыц


                            1. Fesor
                              01.04.2016 18:31

                              Суть в том, что большинство людей, которые используют AR, используют их как анемичные модельки, как row data gateway, и в итоге бизнес логика сущностей размазывается в лучшем случае по сервисам-менеджерам. Что по итогу приводит к тому, что из спагетти кода мы получаем лазанья код, то есть если мы хотим внести небольшие изменения не затрагивающие функционал на одном уровне, мы должны будем поменять все насквозь, от контроллера до базы данных.


                        1. Fesor
                          01.04.2016 18:27
                          +3

                          давайте вспомним как вообще появился на свет паттерн Active Record. Сидели чуваки, и была у них комбинация из Domain Object + Row Data Gateway:

                          class User {
                              private $attributes;
                          
                              private function __construct($email, $password) {
                                   // тут есть варианты что бы можно было подменять реализацию
                                   $this->attributes = UserGateway::create(); 
                                   $this->attributes->email = $email;
                                   $this->attributes->password = $password;
                              }
                          
                              public static function register($email, $password) {
                                   $user = new static($email, $password);
                                   $user->attributes->save();
                              }
                          
                              public function makeSomeBuisnessStuff() { /** ... */ }
                          }

                          и все было ништяк, инкапсуляция, разделение ответственности, удобно же. А потом кто-то задумался… вот нет у меня в проекте сложной бизнес логики… я тупо данными оперирую на уровне CRUD. И выходит что для простой прослойки бизнес логики мне надо городить сверху еще одну прослойку объектов… зачем… я лучше прямо в row data gateway вынесу свою простую логику.

                          И так и сделали, и назвали это дело active state или active record. И для простых проектов — это мега удобно, но проекты посложнее — там уже нужно вводить domain objects, а по итогу выходит что люди начинают размазывать логику по сервисам, и иногда делают их stateful.

                          Альтернатива — data mapper. И я сейчас не про доктрину, ибо там намнооого больше чего есть. Я сейчас про самую примитивную реализацию. По уровню сложности — вот ни разу не сложнее active record, но вот гибкости и пространства для моневра дает чуть больше.

                          И проблема сейчас в том, что у людей из полноценных решений только простые примитивные реализации active record, и мегажирная доктрина. А про проекты типа spot2, analogueorm никто и не слыхивал. И в итоге у людей возникает непонимание как все эти вещи юзать. Культ карго и все такое.


                          1. bardex
                            01.04.2016 18:48

                            а курсы у вас есть ?


                1. Fesor
                  01.04.2016 16:18

                  что AR — антипаттерн.

                  Ну вот… на счет того что это антипаттерн не соглашусь, а вот то что его оверюзят там где не надо — это факт. Доктрина — это противоположная сторона — это удобный инструмент для прототипирования и быстрой разработки.

                  тут другое дело что для половины проектов и ORM в общем-то не нужен. Достаточно table gateway организовать что бы sql не размазывался по проекту. Ну и с учетом трендов типа использования документно-ориентированных баз данных и т.д. достаточно простого мэппера какого.


                  1. M-A-X
                    01.04.2016 16:30
                    -4

                    > для половины проектов и ORM в общем-то не нужен

                    +

                    > чтобы sql не размазывался по проекту

                    +


            1. Fesor
              01.04.2016 16:20

              Развелось так званых программистов, не умеющих писать SQL.

              Почему же? Просто мне вот не особо хочется париться по поводу того, какую базу данных выбрать например. В итоге я сначала накидываю логику приложения а потом думаю, какая модель данных тут подходит больше и что выбрать. Скажем если я выберу mongodb — мне по сути ничего вообще не надо. Выберу реляционку — прикручу доктрину, я всеравно все выборки на чтение в большинстве случаев делаю через dbal.


              Мне не нравятся активрекорды, доктрины и прочий мусор.

              А битикс не мусор?


              1. M-A-X
                01.04.2016 16:36
                -5

                > Просто мне вот не особо хочется париться по поводу того, какую базу данных выбрать например.

                Но по факту большинство не меняет базу. Да и есть PDO. :)

                >А битрикс не мусор?

                Я взял только знакомый интерфейс, который меня устривал, и расширил его потом. :)


                1. SerafimArts
                  01.04.2016 16:44

                  1) Почему же, я довольно часто сталкивался с кейсом, когда локально используется sqlite, а на дев. сервере и боевом уже mysql и прочие. Причина одна, небольшой проектик, вроде блога или лендинга для исправления мелких багов проще развернуть на простом окружении — php + builtin + sqlite, вместо конфигурирования php + apache + mysql.
                  2) PDO не меняет SQL синтаксис. ORM и билдеры это делают, подстраивая его под нужную БД. Не весь конечно, но большинство популярных задач оно решает.


                  1. DenQ
                    01.04.2016 16:54

                    Дело не в том что ORM меняет синтаксис. Я бы сказал что ORM, немного не об этом. И сравнивать ее с PDO не совсем корректно.
                    ORM помогает легко вытягиваеть связанные данные, вторая буква в аббревиатуре, как раз на это указывает.
                    Вместо того что б писать бесконечные left join(которые я люблю), досточно просто написать $post->comments;


                  1. M-A-X
                    01.04.2016 17:00
                    -2

                    > вместо конфигурирования php + apache + mysql

                    А что там конфигурировать? Взял Open Server и все :)
                    Да и с импортом/экспортом/дальнейшей доработкой проблем не будет. :)


                    1. Delphinum
                      01.04.2016 18:03

                      Не так давно нужно было развернуть небольшой (на самом деле громадный) проект у жены на ноуте, чтоб она подправила там верстку. Стоял у нее Windows и я попробовал Open Server. Как оказалось, теперь без доната эта штука качается с обрезанной скоростью, весит 180 метров, а устанавливается (распаковывается) минут 15.
                      Я около часа ставит Open Server, затем еще час собирал зависимости и настраивал окружение. В результате плюнул на все и следующим утром накатил Ubuntu Linux. В одну команду поставил окружение (PHP Web-server + bowerphp + sqlite) и отдал рабочий проект.
                      Этот же проект надо будет передать другому верстальщику, у которого MacOS и нет Open Server. Предложите ему перейти на Win + Open Server? )


                      1. Fesor
                        01.04.2016 18:38

                        vagrant, docker?


                        1. Delphinum
                          01.04.2016 19:18

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


                      1. M-A-X
                        01.04.2016 19:52
                        -5

                        >эта штука качается с обрезанной скоростью, а устанавливается (распаковывается) минут 15.

                        Может у вас нищебродный интернет и ноут? :)

                        >затем еще час собирал зависимости

                        Какие еще зависимости?

                        > В одну команду поставил окружение (PHP Web-server + bowerphp + sqlite) и отдал рабочий проект.

                        Будто mysql так сложно поставить :)
                        Такое уже пишут.

                        >Предложите ему перейти на Win + Open Server? )

                        Предложите ему перейти на Ubuntu и то, что Вы ставили :)


                        1. Delphinum
                          01.04.2016 19:59
                          +1

                          Может у вас нищебродный интернет и ноут? :)

                          Попробуйте сами скачать с официального сайта без доната.
                          Какие еще зависимости?

                          У крупные проектов есть такая вещь, как зависимости.
                          Будто mysql так сложно поставить :)

                          Ну как сказать, вот примерный порядок действий для Win:
                          • Скачать
                          • Распаковать
                          • Установить
                          • Сконфигурировать (имя/пароль админа)

                          Зачем все это когда можно использовать sqlite с теми же возможностями (естественно ограниченными) для локальной разработки, которая развернется с выполнением install.sh?
                          Предложите ему перейти на Ubuntu и то, что Вы ставили

                          Боюсь он пошлет вас и меня очень далеко и останется сидеть на чем сидел.


                      1. KReal
                        04.04.2016 20:43

                        PHP на винде практичезки из коробки работает, кстати. Web Platform Installer в помощь.


                        1. Delphinum
                          04.04.2016 22:26

                          PHP на винде практичезки из коробки работает

                          Почему "практичезки" из коробки? Он вполне полноценно работает из коробки на винде.
                          Web Platform Installer

                          Microsoft Web Platform Installer — бесплатное приложение, которое упрощает загрузку, установку и обновление всех компонентов веб-платформы Microsoft, включая Internet Information Services (IIS), SQL Server Express, .NET Framework и Visual Web Developer

                          А можно мне просто PHP с драйвером PDO_SQLite?


                1. Fesor
                  01.04.2016 18:37

                  Но по факту большинство не меняет базу. Да и есть PDO. :)

                  Ну… разные бывают задачи. А еще есть микросервисы, когда весь проект — это на самом деле много мелких проектов, и у каждого может быть своя база специфичная под нужды.


                  1. M-A-X
                    01.04.2016 19:57
                    +1

                    Все бывает, но у большинства — один цельный проект, а не куча микросервисов, да и там база, как правило, одна. :)


        1. Fesor
          01.04.2016 15:35
          +1

          Грустно это слышать в 2016-ом году...


          1. M-A-X
            01.04.2016 15:45
            -1

            Ну нету у меня стороннего кода, который использует композер.
            Что грустного тут?


            1. Fesor
              01.04.2016 16:21

              У композера еще есть модный автозагрузчик.


              1. M-A-X
                01.04.2016 16:43
                -5

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


                1. Delphinum
                  01.04.2016 18:04

                  но мне как-то не хотелось писать для чужих либ автозагрузчик в композере

                  Соль в том, что composer сам пишет автозагрузчик.


                  1. M-A-X
                    01.04.2016 20:16

                    О, это круто :)
                    Спасибо.


                1. Fesor
                  01.04.2016 18:39

                  для чужих либ автозагрузчик в композере

                  А чужих либ нет в композере? Может есть уже получше альтернативы?


                  1. M-A-X
                    01.04.2016 20:07
                    -1

                    Ну я только недавно перешел на ВДС.
                    Мне больше не было чем заняться, как искать, что есть в composer :)
                    Хотя оказывается 1 либа есть, только на сайте самой либы нету упоминания об установке через composer.


                    1. Fesor
                      01.04.2016 20:14

                      Мне больше не было чем заняться, как искать, что есть в composer :)

                      Рекомендую, за 4 года там много годного собралось. Вообще рекомендую вам познакомиться с композером поближе, возможно поддержка ваших проектов чуть облегчится.


                      1. bardex
                        01.04.2016 22:07

                        Оффтопик, но может посоветуете из composer хороший слой для работы с базой, кроме Doctrine?


                        1. Fesor
                          02.04.2016 02:16

                          Смотря что вам нужно. Если именно "слой" — то кроме доктрины по сути ничего больше нет. А так есть Spot2 например, он выглядит относительно приятно.


          1. DenQ
            01.04.2016 15:47
            -1

            Он видимо и bower`ом тоже не пользуется :)


            1. M-A-X
              01.04.2016 15:59

              Нет.
              У меня сайты до марта месяца жилы на шаред хостинге.
              А там, как я понимаю, нету необходимого npm.

              Да и у меня js лежит в cdn. :)


            1. Fesor
              01.04.2016 16:21

              Знаете, я вот тоже bower-ом не пользуюсь… npm и все такое. а bower мертвый.


              1. DenQ
                01.04.2016 18:38

                Почему bower мертв?


                1. Fesor
                  01.04.2016 18:40

                  1. DenQ
                    01.04.2016 18:49
                    -1

                    И только?
                    Я бы не говорил что он мертв, я бы сказал, что он возвожно скоро удейт в сторону.


                    1. Fesor
                      02.04.2016 02:17

                      ну… в принципе согласен, я драматизировал. Но вы почитайте конец дискуссии, там просто проблемы с поддержкой тулы, на нее забили.


                1. bromzh
                  01.04.2016 19:09

                  А зачем использовать 2 инструмента (npm и сабж), выполняющих одинаковую задачу?
                  Сейчас js становится всё больше и больше изоморфным, граница между платформами (браузер, нода, etc) всё больше размывается и нет смысла разделять библиотеки на фронт и бэк.


                  1. Fesor
                    01.04.2016 20:05

                    Ну например если фронтэнд — это просто jquery и плагины, то тут преимущества npm перед bower уже не так очевидны.


                    1. Delphinum
                      01.04.2016 20:07

                      А если frontend зависимости собираются в один файл внутри какого нить gulp и нужно четко разделять frontend и develop зависимости, то таки bower решает.


                      1. Fesor
                        02.04.2016 02:18

                        Вот как раз таки npm тут решает больше.


                        1. Delphinum
                          02.04.2016 02:30

                          А уже есть хорошая замена столь ненавистному мною main-bower-files в npm?


                          1. Fesor
                            02.04.2016 16:34

                            не использоваь bower, использовать для сборки бандлеры вроде webpack или system.js (ну или любой другой бандлер).


                            1. Delphinum
                              02.04.2016 20:51

                              А если автоматическая сборка недопустима и нужно точно указать какие зависимости относятся к frontend, а какие к dev?


                              1. Fesor
                                03.04.2016 01:05

                                Поясните, для меня это какая-то надуманная ситуация.


                                1. Delphinum
                                  03.04.2016 01:17

                                  Был опыт невозможности использования автосборщиков на подобе webpack (связано с параноидальной безопастностью начальства), потому только автоматизированная, но все же подконтрольная сборка.


                                  1. Fesor
                                    04.04.2016 23:11

                                    связано с параноидальной безопастностью начальства

                                    Я… даже не знаю что сказать. Я бы на вашем месте просто бы заюзал webpack, а в качестве шапочки из фольги просто запускал бы сборщик в docker-контейнере без доступа к сети.


                                    1. Delphinum
                                      04.04.2016 23:38

                                      Дело не в сборке, а в ссылках внутри js файлов. Нужно было собрать проект так, чтобы пользователи без соответствующего доступа не могли любым способом найти js файлы, которые для них не предназначались. Webpack собирает проект с записью ссылок на chunks внутрь самих js файлов, а этого нельзя было использовать. Короче запутанная там история.


  1. UncleJey
    01.04.2016 14:42
    -2

    А где же CodeIgniter?


    1. bardex
      01.04.2016 14:44

      Я специально выбрал фреймворки, которые сегодня, чаще других упоминаются на habrahabr.ru или hh.ru. В голосовании есть вариант "Другой" в комментариях можно написать какой именно.


      1. maximw
        01.04.2016 21:45

        Почему тогда Symfony 3 нет? увидел ниже, что об этом уже спросили несколько раз


    1. Fesor
      01.04.2016 14:46
      +4

      О мертвых хорошо или ничего.


  1. ExileeD
    01.04.2016 14:55
    +7

    Symfony 3


  1. NeoCode
    01.04.2016 15:16
    +2

    Уважаемые профессионалы, а можете развернуто сравнить Laravel 5 vs. Yii 2 vs. Symfony 2? (для личных проектов, которые могут быть как маленькими так и достаточно большими)


    1. SamDark
      01.04.2016 17:40

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


    1. Big_Shark
      01.04.2016 18:09
      +4

      А вам что больше нравится, bmw, mercedes или audi? Тут все зависит от предпочтений, и знаний, не более, не менее.


      1. NeoCode
        01.04.2016 22:09

        У меня в этой области нет знаний, а следовательно и предпочтений. Потому и спрашиваю.


        1. ExileeD
          02.04.2016 00:00
          -1

          Тут на вкус и цвет. Самое лучшие, это поработать со всеми 3мя. У каждого есть свои плюсы и минусы.


  1. sparksounds
    01.04.2016 15:28

    Silex


    1. bestxp
      01.04.2016 16:34

      поддержу)) который еще и оброс полезными библиотеками)


    1. SerDIDG
      02.04.2016 01:58
      +2

      Который превращается в ходе разработки в тот же symphony 2 но на костылях? ) Спрашиваю ради интереса, потому что когда делал на нём проект, пришлось чуть ли не половину компонентов symphony перетащить, ещё и настроить верно, чтобы не конфликтовали с друг-другом. Были проблемы с последовательностью инициализации последних.


    1. Fesor
      02.04.2016 02:20

      С выходом Symfony 2.8 сайлекс не нужен вовсе.


      1. akubintsev
        02.04.2016 14:58

        Почему? Он стал более легковесным и конфигурируемым на этапе установки? Где об этом почитать можно?


        1. Fesor
          02.04.2016 16:35

          1. akubintsev
            02.04.2016 20:01

            Спасибо выглядит неплохо, но не совсем то, что мне нужно. Иногда микрофреймворк нужен не для микроприложений, а для слабой связности компонентов и низкого оверхеда, чтобы интегрировать в имеющийся код.
            Мне надо что-то вроде 50% функционала стандартного Symfony 2. То есть с yaml-роутингом и конфигурационными файлами, symfony-translate, twig и DI хоть в каком-нибудь виде. Мне показалось проще допилить Silex до этой комплектации, чем урезать Symfony. По крайней мере в случае с Silex накоплена обширная база знаний.
            P.S. я вспомнил еще один нюанс с компонентами 2.8 — негарантированная поддержка php 5.3, что опять же существенно для меня в настоящий момент, увы.


            1. Fesor
              03.04.2016 01:10

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

              Ну тут да, тут проще брать отдельные компоненты даже, а не микрофреймворки. Хотя если надо быстро накидать апишку — то почему бы и нет.
              Мне показалось проще допилить Silex до этой комплектации

              Мне тоже так казалось пока не попробовал, в итоге теложвижений было много больше, а урезать симфони — без проблем. Правда у меня на этих проектах небыло сильно требований по быстродействию и т.д. потому чуть оверхэда добавляло. Но опять же в режиме микроядра все должно быть ок.
              негарантированная поддержка php 5.3, что опять же существенно для меня в настоящий момент, увы.

              Чтож, могу лишь посочувствовать. У меня подавляющее большинство проектов на 5.6 и все за последние месяца 4 на php7.


    1. dmitryvashkevich
      02.04.2016 02:20

      silex — деревяшка, к которой легко приделывается термоядерный реактор, который умеет печь блины и делать конфетки. для меня, как любителя, делает еще и офигенный кофе :)


  1. cjbars
    01.04.2016 15:31
    +1

    Вы не поверите, будете смеяться, но CakePHP. Как то привык уже :-)


    1. bardex
      01.04.2016 15:32
      +1

      мой первый фреймворк, еще 1 версия.


  1. kanstantsin
    01.04.2016 15:31
    +1

    Кмк, принятие PSR в последние годы направляет PHP в сторону модулей/компонентов, а не фреймворков. Сейчас легко можно собрать фреймворк под свои задачи, без мук выбора.


    1. SerafimArts
      01.04.2016 15:39

      Так современные фреймворки как раз и компонентные. С таким же успехом можно взять симфони или ларавельку и разобрать на составляющие. Будет почти тоже самое, но в обратную сторону.


      1. kanstantsin
        01.04.2016 15:41
        +2

        Если разобрать ларавельку, то получится симфони :)
        Я про то и говорю, что понятие фреймворк теперь это набор компонентов и нет особой разницы, кто эти компоненты воедино собрал и назвал новым именем.
        Кроме того, чтобы привязываться к фреймворку и вникать в его абстракции, нужно хорошо подумать, что будет с ним через несколько лет. Для работы на аутсорс это важнее, свой проект во фреймворке, скорее всего, не нуждается.


  1. yvm
    01.04.2016 15:38
    +1

    Slim 3


    1. MikeLP
      01.04.2016 16:16
      +1

      Не знаю почему поставили минус. Он хорош как для мини фреймворка, а всего чего не хватает можно доставить из композера. С одной стороны фреймворк, с другой стороны гибкость решений. Разве не к этому мы стремимся?


    1. hOtRush
      01.04.2016 16:21
      -2

      Как-то я считал bitrix cms, а не фреймворком.


      1. MikeLP
        01.04.2016 17:20
        +2

        В смысле? Я не очень понял в чем связь SlimPHP и Bitrix


  1. wordwild
    01.04.2016 16:21
    +1

    Phalcon на PHP7


    1. kanstantsin
      01.04.2016 21:00

      Мне кажется, что фалькон умер еще до выхода PHP7. А теперь и подавно. Не успевают писать зефир и баги в фальконе править, слишком мало контрибьюторов.
      Да многим после выхода PHP7 он не нужен, т.к. разница в скорости уже не такая значительная, а ограничений получается много.


      1. wordwild
        01.04.2016 23:49

        Это всё из-за кризиса. Из разряда, как нам на одном сервере запустить три-четыре «фейсбука»? А флакон, всё-таки, несмотря на все свои недостатки, наименее требовательный к ресурсам среди вышеперечисленных вариантов.


        1. Fesor
          02.04.2016 02:21

          Ну я как бы могу на go свои проекты писать и выйдет ни чуть не медленнее, какой мне смысл брать фреймворк на Си или на компилируемом в Си языке?


          1. wordwild
            02.04.2016 02:53

            Очень правильное решение — писать на go. Как только создадут опрос «На каком фреймворке вы будете писать Go приложение в 2016 году», я обязательно выскажусь по-этому поводу. Но, поскольку, мы обсуждаем PHP, я вынужден воздержаться от комментария о смысле использования Go вместо Phalcon.


            1. Fesor
              02.04.2016 16:38
              +1

              Да поймите, если у меня внезапно будут задачи где нужны прилиные RPS, и, мжет у нас уже есть существующее приложение на PHP, устраняем сайдэффекты меджу запросами и впиливаем поверх всего php-pm. В итоге время бутстраппинга фреймворка невилировано, а скорость PHP7 позволяет сравнивать время работы зефрики и просто PHP. Одно но — пых теперь не умирает, а это требует чуть более адекватного уровня. Как никак средне-статистический похапэшник понятия не имеет что такое сайд эффекты и какие из них есть в его коде.


              1. wordwild
                02.04.2016 21:22

                Меня больше ресурсы интересуют, а не скорость. Заведётся ли Laravel на VPS 0.25GHz/128Mb или не очень… И тут я понял, что недостаточно изучил вопрос. Пойду гуглить.


                1. Fesor
                  03.04.2016 01:11

                  Заведётся ли Laravel на VPS 0.25GHz/128Mb или не очень…

                  А зачем вообще такой VPS брать? Это ж бесполезная игрушка.


                  1. wordwild
                    03.04.2016 11:12

                    Это я больше для примера. Хотя такие бесполезные игрушки у нас вполне предлагают хостеры. И глядя на то, как развивается кризис, терзают смутные сомнения, что скоро мы всерьёз будем рассматривать даже такие игрушки.



  1. stepmex
    01.04.2016 17:50
    -2

    TYPO3


  1. Aeliot
    01.04.2016 17:50
    +5

    Тут важно с какой целью задавался вопрос. Если с позиции «взять какой-то новый фреймворк на изучение или продвинуться в текущем»? То можно посмотреть по вакансиям. «Самый-самый» тренд может и не словите, но в качестве прогноза на ближайшие пару лет сойдёт. Без хлеба точно не останешься.
    Итак.
    Посмотрел сейчас на jobs.tut.by (тот же hh.ru, только для Беларуси)
    Из 221-й вакансии, где требуется (упоминается) PHP
    [ Фреймфорки ]
    В 46-и вакансиях в требованиях упоминается Symfony
    В 25-и Yii
    В 29-и Zend Framework (возможно немного меньше, если в одном объявлении использованы обе формы: 20 Zend + 9 ZF)
    В 19-и Laravel
    В 5-и CakePHP
    В 4-х CodeIgniter
    [ CMS ]
    В 33-и Bitrix
    В 24-х Magento
    В 21-и Drupal
    В 17-и Joomls
    В 17-и WordPress
    Из подсчёта выкинуты Маркетологи, SEO-специалисты и пр. В одном и том же объявлении может быть упомянуто несколько фреймворков/CMS. Но общее представление можно составить.
    Ещё можно воспользоваться wordstat.yandex.ru и посмотреть количество запросов (уровень проявленного интереса) и, возможно, динамику его изменения.


    1. morozovsk
      04.04.2016 14:11

      В России немного иначе. Неделю назад делал срезы по вакансиям на hh.ru, к сожалению данные остались только по последнему, но пропорции приблизительно те же, что и по всем php-программистам без учёта зп (постараюсь вечером найти эти результаты).
      Итак, отфильтровал все все php-вакансии с зп >= 140к, получилось их — 90, а потом по ним искал упоминания в описании:
      ниже результаты (поисковая фраза — количество вакансий, в которых присутствовала)
      yii — 47
      yii2 — 29
      symfony — 19
      symfony2 — 19
      zend — 11
      mysql — 70
      redis — 33
      mongodb — 23
      postgresql — 16
      memcache — 11
      linux — 20
      docker — 17
      composer — 15
      git — 58
      svn — 9


      1. bardex
        04.04.2016 14:42

        Laravel? Zend еще часто пишут просто как ZF.


        1. morozovsk
          04.04.2016 15:02

          laravel — было меньше 10, у zf было где-то 5, в общем ни как особо не влияло на итоги


          1. bardex
            04.04.2016 15:10

            спасибо большое за цифры


            1. morozovsk
              04.04.2016 15:17
              +1

              Посчитал сейчас текущие данные:
              поисковый запрос на hh — количество вакансий
              NAME:php — 1039
              NAME:php AND (yii or yii2) — 292
              NAME:php AND (symfony or symfony2 or symfony3) — 194
              NAME:php AND (zend OR zf) — 137
              NAME:php AND (laravel or laravel4 or laravel5) — 95


  1. adubovskoy
    01.04.2016 17:50

    Drupal добавьте тогда уж)


    1. afi13
      01.04.2016 18:15

      Непонятно за что минусуют. Если уж решили добавить Bitrix, то надо было и Drupal, и MODX добавлять. А так какой-то странный опрос получается.
      Ну и в целом список скудный, Silex, Slim, Phalcon, CakePHP имеют право участвовать в статистике, даже если по каким-то причинам кому-то не нравятся.


      1. bardex
        01.04.2016 19:59

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


        1. SerafimArts
          01.04.2016 23:02
          +5

          Простите, я пропустил тот момент когда это "чудо" начало зваться фреймворком. Ну хоть близко.


  1. LeonidZ
    01.04.2016 18:34

    На Symfony 3, естественно


    1. LeonidZ
      01.04.2016 23:47

      На всякий случай, когда будете считать статистику: я нажал на другое, т.к. все же между sf2 и sf3 приличное количество отличий.


      1. youmad
        02.04.2016 02:22
        +1

        Нет там больших отличий. Ломает обратную совместимость? Да. Сложно обновиться с 2.8 до 3? Нет. Различий в версиях минимум.


      1. Fesor
        02.04.2016 02:23

        Можете назвать "приличное количество различий" между sf2.8 и sf3.0 кроме удаления помеченного депрекейтед функционала? Я вот как-то не могу. Новая структура директорий? Я ее с версии 2.6 юзаю.


        1. LeonidZ
          02.04.2016 02:38

          Скорее всего вы просто не используете огромное количество возможностей Symfony.
          Вот листинг того, что надо менять при переходе с 2.x на 3.0: https://github.com/symfony/symfony/blob/master/UPGRADE-3.0.md.
          Но как минимум хотя бы с конструкторами форм вы должны были столкнуться (теперь там не экземпляры FormType, а FormType::class), измененными валидаторами объектов и измененными Yaml конфигами (например, вызов колбеков после конструктора, описание роутов).
          Так же есть незначительные, но все же изменения в ContainerBuilder-е, bundle compiler-е, dependecy injection, если вы делаете свои бандлы кастомно прекомпилируемыми.
          Понятно, что это не кардинальные изменения по сравнению с 1.x -> 2.x, но если проект серьезный, то несколько дней правок обеспечены.


          1. youmad
            02.04.2016 09:24
            +1

            теперь там не экземпляры FormType, а FormType::class

            Нет, теперь там FQCN вместо alias.
            измененными валидаторами объектов

            Уточните, пожалуйста. Мои правила в sf3 такие же, как и в sf2.
            измененными Yaml конфигами

            Это правится один раз.


            1. LeonidZ
              03.04.2016 00:34

              По поводу FQCN согласен, но цитирую UPGRADE-3.0.md от Symfony:

              ...the FormFactory::create*() methods is not supported anymore. Pass the fully-qualified class name of the type instead.
              Before: $form = $this->createForm(new MyType());
              After: $form = $this->createForm(MyType::class);

              Поэтому не совсем понятно, где именно вы нашли то, к чему относилось «Нет».


            1. LeonidZ
              03.04.2016 00:47

              В любом проекте при переходе с чего-то одного на что-то другое все правится 1 раз, поэтому это странный аргумент. По факту после апдейта на 3.0 даже с 2.8 значительная часть не «hello world» проектов не работает корректно, и да, необходимо, пробежаться везде и по одному разу в каждом моменте подправить. Т.е. нет 100% совместимости. Но, еще раз, естественно, это не переезд на другой фреймворк (включая sf1.4).

              По валидаторам:
              The PHP7-incompatible constraints (Null, True, False) and their related validators (NullValidator, TrueValidator, FalseValidator) have been removed in favor of their Is-prefixed equivalent.
              The class Symfony\Component\Validator\Mapping\Cache\ApcCache has been removed in favor of Symfony\Component\Validator\Mapping\Cache\DoctrineCache.
              The constraints Optional and Required were moved to the Symfony\Component\Validator\Constraints\ namespace. You should adapt the path wherever you used them.
              The option «methods» of the Callback constraint was removed. You should use the option «callback» instead. If you have multiple callbacks, add multiple callback constraints instead.
              The interface ValidatorInterface was replaced by the more powerful interface Validator\ValidatorInterface. The signature of the validate() method is slightly different in that interface and accepts a value, zero or more constraints and validation group. It replaces both validate() and validateValue() in the previous interface.
              The interface ValidationVisitorInterface and its implementation ValidationVisitor were removed. The implementation of the visitor pattern was flawed. Fixing that implementation would have drastically slowed down the validator execution, so the visitor was removed completely instead.
              Along with the visitor, the method accept() was removed from MetadataInterface.
              The interface MetadataInterface was moved to the Mapping namespace.
              The interface PropertyMetadataInterface was moved to the Mapping namespace.
              The interface PropertyMetadataContainerInterface was moved to the Mapping namespace and renamed to ClassMetadataInterface.
              The interface ClassBasedInterface was removed. You should use Mapping\ClassMetadataInterface instead:
              The class ElementMetadata was renamed to GenericMetadata.
              The interface ExecutionContextInterface and its implementation ExecutionContext were moved to the Context namespace.
              The method addViolationAt() was removed. You should use buildViolation() instead.
              The methods validate() and validateValue() were removed. You should use getValidator() together with inContext() instead.
              The parameters $invalidValue, $plural and $code were removed from addViolation(). You should use buildViolation() instead. See above for an example.
              The method getMetadataFactory() was removed. You can use getValidator() instead and use the methods getMetadataFor() or hasMetadataFor() on the validator instance.
              The interface GlobalExecutionContextInterface was removed. Most of the information provided by that interface can be queried from Context\ExecutionContextInterface instead.
              The interface MetadataFactoryInterface was moved to the Mapping\Factory namespace along with its implementations BlackholeMetadataFactory and ClassMetadataFactory. These classes were furthermore renamed to BlackHoleMetadataFactory and LazyLoadingMetadataFactory.
              The option $deep was removed from the constraint Valid. When traversing arrays, nested arrays are always traversed (same behavior as before). When traversing nested objects, their traversal strategy is used.
              The method ValidatorBuilder::setPropertyAccessor() was removed. The validator now functions without a property accessor.
              The methods getMessageParameters() and getMessagePluralization() in ConstraintViolation were renamed to getParameters() and getPlural().
              The class Symfony\Component\Validator\DefaultTranslator was removed. You should use Symfony\Component\Translation\IdentityTranslator instead.

              Это все изменения в именовании классов, их методов и параметров методов в неймспейсе Symfony\Component\Validator. Странно, что вы не столкнулись с тем, что даже те же Optional и Required валидаторов уже нет на прошлом месте.


          1. Fesor
            02.04.2016 16:40

            Алгоритм простой — апаемся на sf 2.8, все те вещи в списке начинают писать в логах о том что что-то депрекейтед юзается, планомерно выпиливаем старое и пользуемся всеми плюшками sf3 сохраняя обратную совместимость. И как только мы подчистили все — апаемся на тройку.

            То есть если не пропускать обновление на 2.8 то менять придется не много.


            1. LeonidZ
              02.04.2016 17:37

              Вот здесь соглашусь полностью.
              Просто Symfony 2 не есть именно Symfony 2.8. Т.к. 2.8 — это вообще спец. версия для подготовки к переходу на 3.0. В голосовании же идет речь просто про 2.х, т.е. в том числе 2.0. А 2.0 от 3.0 отличается серьезно, и список изменений очень не маленький.
              Мне недавно довелось переводить 2.4 на 3.0 один очень серьезный проект. Так вот, только зачистка на 2.8 заняла 3 дня.


              1. shoomyst
                02.04.2016 17:57
                +1

                Похоже топикстартер просто не в теме версионирования симфони.
                Вообще как на выступлении говорил Fabien есть symfony1 и есть Symfony (никаких 2, 2.х)


  1. brain2xml
    01.04.2016 18:53

    Один большой на YII2 с PHP7 и Postgresql
    И один небольшой на Drupal


  1. andrievski88
    01.04.2016 19:37

    Если Битрикс фреймворк, тогда почему отсутствует MODX Revolution?


  1. VolCh
    01.04.2016 19:57

    Симфонии 3 куда тыкать?


    1. Fesor
      01.04.2016 20:05
      +2

      Я в симфони 2 тыкнул.


  1. ivorobioff
    01.04.2016 22:19
    -3

    Как я рад что на первом месте пока-что Yii2 а не Laravel 5 :)


    1. Fesor
      02.04.2016 02:23
      +2

      Отрекись от своего бога.


      1. ivorobioff
        02.04.2016 17:53
        -1

        У меня нет бога, просто Laravel это дьявол который пудрит всем мозги. И самое страшное что не все осознают это.


        1. SerafimArts
          02.04.2016 21:35
          +1

          Вот мне, лично для себя интересно — чего плохого в Laravel, чего нет в Yii2?


          1. Fesor
            03.04.2016 01:12

            У человека нет бога, зато есть дьявол. Сатанист же.


            1. ivorobioff
              03.04.2016 10:01

              Если был бы сатанист значит Laravel мне бы устраивал. Так что низнаю кто тут сатанист


  1. Naymen
    01.04.2016 22:19
    +1

    Я сейчас пишу на Yii2 Advanced. Мое мнение, что Yii2 вырос после обновления из Yii1.


    1. Fesor
      02.04.2016 02:24
      +1

      Интересно что вы скажите если для разнообразия попишите на других фреймворках. Вот просто ради расширения кругозора. Возможно ваши проекты на Yii так же станут лучше за счет нового опыта.


    1. Wave
      02.04.2016 22:34
      +1

      Очень заметно вырос. Делал проекты на Yii1, было ощущение какой-то инопланетной логики. Недавно закончил проект на Yii2 — всё очень просто и понятно. Не исключаю, что это моя квалификация поднялась, но всё-таки по ощущениям гораздо удобней стало работать.


      1. Fesor
        03.04.2016 01:15

        А с какими фреймворками у вас еще опыт есть? ибо… ваше описание не говорит ровным счетом ничего на самом деле. Скажем, есть люди которые довольны своей производительностью труда используя какие-то инструменты. Из них половине повезло с задачами, а вторая половина просто не знает что можно эффективнее расходовать время. Ну то есть… для меня Yii слишком сильно сковывает в том как делать дела. И мне интересно какие дела делают те, что у них все хорошо.


        1. michael_vostrikov
          03.04.2016 07:04
          +1

          Раз уж зашел разговор про сравнение фреймворков. Я пару раз начинал изучать laravel, но как говорится "ниасилил" (может потом как-нибудь еще поразбираюсь). То что не понравилось по сравнению с Yii:

          Генератор HTML для форм надо ставить отдельно. На это есть свои причины, но неудобно.

          Для работы с ассетами надо использовать elixir, для elixir надо ставить node.js, нода грузит кучу модулей, которые занимают много места, и к тому же делает слишком большую вложенность папок node_modules, на что Windows ругается при удалении.

          Статические обращения через фасады. Например, в обучающем примере есть вызов Redirect::route().
          Захочешь посмотреть, как этот класс Redirect устроен, какие функции в нем еще есть, или может в документации что-то не понял, ищешь по исходникам и находишь:

          class Redirect extends Facade
          {
              protected static function getFacadeAccessor()
              {
                  return 'redirect';
              }
          }

          А класс на самом деле называется Redirector.
          Из-за этого автокомплит в IDE не работает. Для автокомплита можно поставить отдельный пакет, но там просто заглушки, поэтому к месту реального объявления все равно не перейти.

          Генератор модели по таблице и генератор CRUD в Yii тоже удобная штука, позволяет быстро создать минимальный рабочий код. Особенно если сделать свой генератор, который генерирует в верстке выпадающие списки на основе foreign keys. Для laravel вроде тоже есть какие-то пакеты, которые можно поставить отдельно, но я с ними не работал, поэтому ничего сказать не могу.

          На мой взгляд, Yii хорошо подходит для разработки в одиночку небольших и средних проектов, у него неплохая документация и более-менее понятная архитектура, в которой можно разобраться просто по исходникам.


          1. Big_Shark
            04.04.2016 07:07
            +1

            Сейчас все больше проектов уходят в сторону SPA, где класс форм больше не нужен, а тот самый elixir приходится к месту, так как есть возможность подключить такие штуки как babel.
            Facade в Laravel это просто доступ к классу в контейнере по имени, в данном случае имя в контейнере 'redirect'.
            CRUD меняется от проекта к проекту, и как правило занимает время только на начальном этапе, поэтому нет смысла выносить это в функционал, да и как правило для таких проектов подойдут обычные CMS или CMF.
            Использовать что Laravel, что Symfony в PHPStorm без плагинов почти не возможно, так что не вижу в этом ничего особенного.


        1. michael_vostrikov
          03.04.2016 07:04
          +1

          А в каких задачах Yii вас сковывает?


          1. Fesor
            04.04.2016 10:06
            +1

            Все что связано с бизнес логикой сложнее CRUD и соблюдением принципа protected variations (когда требования меняются — это важная штука).


  1. chilic
    01.04.2016 22:20
    +3

    Очень понравился Slim и PHPixie за их минималистичность.


  1. bardex
    01.04.2016 22:25

    Если подвести промежуточный итог, то понравился ответ kanstantsin https://habrahabr.ru/post/280694/#comment_8834966, сегодня используя composer можно собрать нужный функционал из отдельных, хорошо зарекомендовавших себя, библиотек, например на базе микрофреймворка.


    1. kovalevsky
      01.04.2016 22:49

      Всё на микрофреймворках писать неудобно, но ради исключения оверхеда, для небольших проектов, вариант с композером отлично подходит. Сам успешно применяю :)


  1. aktuba
    02.04.2016 00:58
    +1

    Не понимаю… Для чего в 2016-м использовать фреймворки? Composer + Github помогут для проекта любого размера.


    1. Delphinum
      02.04.2016 01:04

      Часто нет лишней недели на создание архитектуры из кусочков, проще использовать:

      php composer.phar create-project --stability="dev" zendframework/skeleton-application path/to/install


      1. Fesor
        02.04.2016 02:26

        Да там как бы за пару часов можно сделать… PHP-DI + PSR-7 + какой FastRoute + PSR-3 + Doctrine2 и готов полноценный фреймворк.


        1. Delphinum
          02.04.2016 02:34
          +2

          Не думаю что за пару часов можно перечисленное вами сделать, если ранее вы этого еще не делали (если делали, то это уже ваш личный фреймворк и "не считается"), а ведь все что вы наделаете нужно еще "протестировать временем", а потом не раз переписать, перекостылись, перепере. Я обожаю "сборные" фреймворки (даже есть собственное решение в этой области), но очень часто хватает какого нить ZF2, что наводит на мысли.


          1. Fesor
            02.04.2016 16:44
            -1

            протестировать временем

            Вы ничего не пишите, вы только берете готовые компоненты и связываете их вместе через тот же php-di. Все то что я перечислил это либо рекомендованные стандарты (PSR) либо популярные реализации (FastRoute юзают в половине микрофреймворков). Да и потом, заварачиваем все в свои адаптеры и заменяем по необходимости отдельные компоненты.

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

            В целом же я лично ленивый и потому просто для мелких проектов беру sf3.0 в режиме микроядра а для проектов побольше — просто свою сборку sf3.


            1. Delphinum
              02.04.2016 20:58

              Вы ничего не пишите, вы только берете готовые компоненты и связываете их вместе через тот же php-di.

              А давно инстанциация всего набора необходимых в приложении классов == созданию архитектуры приложения? Про конфигурирование, взаимодействие, системное тестирование и подобную муть вы решили не упоминать? А какую модель роутинга вы выбирите? А ваше приложение будет поддерживать RESTful API, или только классические GET/POST HTTP запросы с возвратом HTML? А как вы будете решать проблему дублирования кода представления? А если в приложении планируется рендеринг ответа в виде HTML кода, но будет много JS на странице, как вы это решите? А (подставьте любой другой архитектурный вопрос)?
              То есть реально сделать простенький фреймворк за пару часов, просто под задачу

              Composer + Github помогут для проекта любого размера

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

              Замечательно что у вас есть готовые решения )


              1. Fesor
                03.04.2016 01:22

                созданию архитектуры приложения?

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

                • конфигурирование — PHP-DI, .env
                • взаимодействие — PHP-DI, FastRoute, может какой Event Dispatcher еще
                • системное/модульное тестирование — HttpKernel/PSR7 + phpspec + codeception/phpunit/peridot/etc

                А какую модель роутинга вы выбирите?

                Я же написал — FastRoute, в плане "модели роутинга" вариантов как бы не сильно много. Это все в любом случае вешается как мидлвэр какой.
                А ваше приложение будет поддерживать RESTful API, или только классические GET/POST HTTP запросы с возвратом HTML?

                А ваше? Есть например symfony/serializer для простеньких штук, и fractal для вещей посложнее. А так — повторю еще раз — PSR-7, HttpKernel.
                А как вы будете решать проблему дублирования кода представления?

                Twig — у него пока серьезных конкурентов как бы нет.
                А если в приложении планируется рендеринг ответа в виде HTML кода, но будет много JS на странице, как вы это решите?

                Я последние три года перешел на схему http api + spa на ангуляре и в большинстве случаев решают этот вопрос так. Ну и да, javascript-а в html-е у меня нет в любом случае. И это вообще к теме фреймворка не привязано.
                подставьте любой другой архитектурный вопрос

                То что вы описали это не архитектура — а инфраструктура. Архитектура — это то как вы например организуете работу с платежками, или систему скидок прикрутили и т.д. То есть это болше влияет на уровне бизнес логики, а там у меня старый добрый PHP (спасибо доктрине за persistence ignorance)


                1. Delphinum
                  03.04.2016 12:13

                  А давно архитектура приложения = фреймворк? Это ж совершенно разные вещи.

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

                  Лихо вы архитектуру приложения и бизнес логику "сэквивалентили" ))
                  По остальным ответам — видите, если есть опыт в сборке фреймворка из кусочков то дело идет быстрее, но это, как я уже говорил ранее, "жульничество", ибо вы уже создали свой фреймворк и его пользуете. Собрать такое (работающее) быстро с первого раза не получится.


                  1. Fesor
                    03.04.2016 13:12

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

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

                    Да нет, просто у меня много опыта работы с этими компонентами в контексте Symfony. Ну то есть понятно что человек который первый год пишет на Laravel собрать адекватно свой фреймворк практически невозможно. Но ему еще и не нужно, три стадии обучения и все такое, а он еще напервой.


                    1. Delphinum
                      03.04.2016 22:41

                      Архитектура — это то что дорого менять

                      Тобишь если мой кусок кода написан наспех и крайне каменно, а его вдруг стало необходимо поменять, да как то очень дорого, то этот кусок стал архитектурой?
                      Но ему еще и не нужно

                      А вам нужно? )


                      1. Fesor
                        03.04.2016 22:45

                        то этот кусок стал архитектурой?

                        Совокупность таких кусочков. Это то как вы построили свое приложение, как здание. если на аналогии переходить. А фреймворк — это каркас, то есть без него никак, но это второтепенная часть приложения.


                        1. Delphinum
                          04.04.2016 01:53

                          Тобишь выявление рисков есть архитектура?


                          1. Fesor
                            04.04.2016 10:08

                            Тобишь архитектура это то как вы построили приложение. Плохая архитектура — высокий уровень технического долга. А уже технический долг влияет на риски. Потому стараются выстраивать архитектуру так, что бы уровень технического долга был на приемлимом уровне. А для этого надо выявлять риски, что может поменяться и т.д. Естественно не стоит забывать про yagni но и про protected variations помнить надо.


                            1. Delphinum
                              04.04.2016 19:54

                              Тобишь архитектура это то как вы построили приложение

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

                              А что тогда структура? )) Мы сейчас уедем не в ту степь с вами. Может таки не будем уходить в размышления на тему — инфраструктура, структура и архитектура — и объединим все это в одно понятие?
                              Если да, то фреймворк (в отличии от библиотеки) дает готовую архитектуру.
                              Пример
                              Возьмем ZF2. Этот монстр скроен из кучи пакетов, но в нем так же есть задел на архитектуру будущего приложения через Zend\MVC и Application. Пользоваться этим или превратить ZF2 в библиотеку, решаете вы как разработчик, но фреймворк предлагает архитектуру.


              1. aktuba
                03.04.2016 02:53

                Я не Fesor, поэтому отвечу за себя.

                >Про конфигурирование, взаимодействие, системное тестирование и подобную муть вы решили не упоминать?

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

                >А ваше приложение будет поддерживать RESTful API, или только классические GET/POST HTTP запросы с возвратом HTML?

                В моем — без разницы. Или тот-же FastRoute мешает написать поддержку RESTful API? Ну а если мне надо будет именно RESTful API — я возьму либу именно для этого, а не сторонний фреймворк.

                >А как вы будете решать проблему дублирования кода представления?

                А что это за проблема?

                >А если в приложении планируется рендеринг ответа в виде HTML кода, но будет много JS на странице, как вы это решите?

                Использованием отдельных вьюх/рендера? В чем проблема-то?


                1. Delphinum
                  03.04.2016 12:21

                  В них тестируется код, но не архитектура или взаимодействие с другим кодом

                  Архитектура и взаимодействия в них уже протестированы временем, о чем я писал выше.
                  Или тот-же FastRoute мешает написать поддержку RESTful API?

                  Скорее мешает вопрос — а что для этого лучше использовать? Когда вы собираете свой первый фреймворк, этот вопрос часто не дает покоя.
                  А что это за проблема?

                  Ну вот предположим вам нужна простая админка для управления данными мобильного приложения. Ничего особенного, десяток сущностей, метр JS оберток для удобного GUI, реляционная база и немного кеша. Все ваши экраны будут делится на 3 основных: таблица сущностей, экран добавления, экран редактирования — и десяток виджетов: список выбора, группа checkbox, группа radio, мультивыбор и т.д. По хорошему, в хорошей архитектуре все это должно быть реализовано ровно 1 раз для всех сущностей, и, если необходимо, переопределено, если для конкретной сущности нужно что то особенное.
                  Использованием отдельных вьюх/рендера? В чем проблема-то?

                  Что за отдельная вьюха и рендер позволит легко прикручивать JS к странице? Объясню по другому. У вас есть коллекция элементов, которые отдаются с сервера в виде HTML списка. Этот список уже готов к изучению пользователем, но к нему нужно прикрутить кнопки с JS логикой, позволяющие удалять компоненты из этого списка, добавлять их и сохранять результат (список в form). Нужно как то восстановить JS модель прямо из этого HTML списка средствами самого JS, навешать на нее события и при изменении модели перерендерить список. Естественно при инициализации список не должен перерендерится. На деле я уже объяснил как это сделать, но когда речь о новом фреймворке, опять таки встает вопрос — а как лучше? Что и отнимает уйму времени. О чем я и говорю сейчас )


                  1. Fesor
                    04.04.2016 10:10

                    Когда вы собираете свой первый фреймворк, этот вопрос часто не дает покоя.

                    Мы тут обсуждали фреймворк на компонентах. Я уже говорил что таким надо заниматься только когда уже есть опыт с одним-двумя фреймворками и отдельно компонентами. Ну то есть это уже уровень чуть повыше должен быть у разработчика.


                    1. Delphinum
                      04.04.2016 20:01

                      Думаю можно обобщить мое высказывание до:

                      Когда вы собираете свой фреймворк, этот вопрос часто не дает покоя


    1. ivorobioff
      02.04.2016 18:03

      Тут я соглашусь, в Интернете можно найти кучу уже готовых программных блоков (ака библиотек/пакетов) из которых можно за день с легкостью создать свой собственный фреймворк. Я даже статью в своем блоге про это написал http://blog.igorvorobiov.com/2016/03/28/build-your-own-php-framework-with-ease/


  1. the__all
    02.04.2016 02:23
    -1

    Очевидно, CakePHP


  1. LAV45
    02.04.2016 02:24
    -1

    Давным давно выбрал Yii2 из эстетических соображений и ни разу об этом не пожалел.
    Если найду в нем баг, с работью пришлю им pull request и заработаю ещё +1 в карму ))


  1. popcorn2d
    02.04.2016 02:24

    А как насчет Lumen?


    1. green_tree
      02.04.2016 21:06
      +1

      использую Laravel постоянно, а вот Lumen совсем не пошел, какой-то недоделанный он (сравнивая с другими микрофреймворками). Поэтому, имхо, насчет Lumen никак…


  1. sayber
    02.04.2016 02:51

    Почему указан Symfony 2 когда как актуальная версия 3?
    Надо тогда уж просто писать — Symfony.
    Ну и конечно, почему нет выбора нескольких позиций?

    Symfony 3 / Laravel 5+
    Очевидно что для крупных проектов и средних, лучшие решения.
    Правда Symfony мало кому по зубам, поэтому выбирают yii.


    1. bardex
      02.04.2016 13:07

      у Symfony 3.0 поддержка 8 месяцев — это не серьезно, а 3.3 еще не вышел. Можете отметить Symfony 2, поменять голосование уже не могу.


      1. shoomyst
        02.04.2016 14:51

        Обновление между минорными версиями во 2-ой ветке было в целом беспроблемным. В любом случае тесты вас спасут.
        Вообще я считаю, что обновляться на минорные версии даже полезно: показывает насколько ваш код способен эволюционировать :)


      1. VolCh
        04.04.2016 11:23

        У Symfony 3 поддержки много лет.


  1. caballero
    02.04.2016 12:47

    Ого!.. Столько минусавания за собственные решения что лучше промолчу. Хорошо что создатели сомфоней и прочих лаваралей в свое время не участвовали в дискусиях на хабре — огребли бы по полной програме сколько в их будущем фреймворке будет костылей, что это будут велосипеды с квадратными колесами и в том же духе.


    1. bardex
      02.04.2016 13:10

      тем не менее 17% работают без фреймворка.


    1. DenQ
      02.04.2016 13:15
      +3

      Понимаете, создать свой фреймворк это нормально. Но только если у вас опыт за плечами в +10 лет.


      1. Fesor
        02.04.2016 16:46
        +1

        Полностью поддерживаю. Свой фреймворк это хорошо когда есть composer и хороший опыт хотя бы с тремя популярными и понимание того что делаешь, а вот с последним у многих проблемки.


        1. M-A-X
          11.04.2016 15:47

          Это те, кто пишут на фреймворке, зачастую не понимают, что они делают :)


          1. Fesor
            11.04.2016 15:57

            Тут нет корреляции. Люди просто зачастую не понимают, что они делают. И когда новички начинают писать свои фреймворки «потому что зачем так сложно», обычно понимания это не добавляет и выходит намного хуже для бизнеса.


            1. M-A-X
              11.04.2016 16:55
              -1

              1. приходится работать после горепрофи на Yii. Это ад.

              2. > обычно понимания это не добавляет

              Если ты не умеешь делать базовые вещи на языке, а лезешь во фрейворки это понимания не добавляет вдвойне.

              3. >И когда новички начинают писать свои фреймворки

              Новички не пишут свои фреймворки, они просто пишут код.

              4. >и выходит намного хуже для бизнеса

              По нормальному новичков к важным процессам не стоит допускать.

              5. >«потому что зачем так сложно»

              Если новичек понимает, что фреймворки чрезмерно усложнены, то он молодец, что не пляшет под эту дудку.

              Фреймворк не панацея от рогатых программистов.

              П.С.
              Чем-то сторонники фреймворков напоминают сторонников майдана. :)


              1. Fesor
                11.04.2016 17:36

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

                2. по поводу понимания… в целях обучения — пожалуйста, пишите что хотите, но на коммерческих проектах только проверенные и стабильные решения, особенно если у вас нет за плечами хотя бы 5-ти лет серьезной коммерческой разработки (то есть вы еще не умеете писать тесты а уже считаете себя умнее остальных).

                В конце конвов помимо роутеров и шаблонизаторов, вам проект еще надо написать, а это нередко не менее сложная штука и сосредоточиться лучше на этом.

                3. новички так или иначе пишут свои фреймворки. Сначала маршрутизацию свою навояют, потом шаблонизатор, потом «класс для работы с базой». Как-то так это происходит в среднем.

                4. Полностью согласен. Но они как-то влазят, ибо рынок труда не насыщен.

                5. Фреймворки не усложнены. Там не сложно, там много. Серьезно, даже если мы возьмем самый какой-нибудь сложный пакет на PHP — доктрину например, то если разобраться там все компоненты системы не особо сложны. Их просто много. И много их что бы покрыть 95% юзкейсов возникающих у разработчиков. А все это ведет к уменьшению издержек.

                p.s.

                к вопросу о адекватности. Вы можете просто рассписать тут какими проектами занимаетесь, количество людей в команде, среднюю длительность проектов и уровень их сложности. А далее мы можем уже продолжать конструктивый разговор на тему «нужны фреймворки или можно обходиться библиотеками и забить на загоны по инверсии зависимостей».


                1. M-A-X
                  11.04.2016 17:58

                  Текущие рабочие проекты огласить не могу, так как я неполиткорректный на хабре :)

                  Продуктовая компания.
                  У сайта-визитки посещаемость порядка 300 000 в день. + АПИ.
                  В команде веб 6 человек.

                  Личные проекты:
                  их несколько, к примеру
                  http://kvartirale.com/

                  >В конце концов помимо роутеров и шаблонизаторов

                  А зачем их вообще писать.
                  У меня роутингом занимается нгинкс, а php и сам шаблонизотор по себе.
                  Понапридумывают проблем на ровном месте.
                  KISS.


  1. Saturnych
    02.04.2016 13:10
    -4

    только yii2


  1. malinichev
    02.04.2016 13:10
    +2

    Я буду на Phalcon писать, как и раньше, как и год назад)
    Параллельно буду делать на Laravel, надо расширяться


  1. akubintsev
    02.04.2016 14:51

    Писать — что?
    Конечно в лидерах по такому опросу будут RAD-фреймворки из-за количественного преобладания задач по созданию типовых веб-сайтов.
    А если я занимаюсь поддержанием и развитием legacy кода под большой нагрузкой, в котором много backend логики реализовано?
    Я лично выбрал Silex.


  1. KpuTuK
    02.04.2016 18:39

    Запиленые под себя компоненты Symfony.


  1. zBit
    02.04.2016 23:24

    Когда писал на PHP, пару лет назад, очень понравился Phalcon. Если бы сейчас дали задание реализовать проект на PHP, то я выбрал бы именно Phalcon.


  1. Cttr
    03.04.2016 03:00

    Хотел Symfony2, но там пока непонятные дела с mongodb-odm-doctrine, поддержка ext-mongodb (привет php7) — с помощью php драйвера. Поэтому пока взор упал на Laravel


  1. remotemethod
    03.04.2016 16:11

    Выбрал бы конечно Laravel или Phalcon. Да и смотрю Zend выбирают все меньше и меньше, это наверное потому что он суров к стандартам.


  1. lebowski
    03.04.2016 22:04

    Выбирающим Yii: фреймворк абсолютно не известен на западе.
    Если вдруг вы захотите вкатиться на Upwork или другие биржи — ваш выбор Laravel


    1. Fesor
      03.04.2016 22:38
      -1

      Apple выбирает Symfony. ну это так, накинуть)


      1. SerafimArts
        03.04.2016 22:56
        +1

        Что Laravel, что Symfony — однофигственно. Для относительно опытного разработчика не будет никакой разницы между ними, т.к. они оба слабосвязанные и с одинаковым успехом можно использовать как L5 + Doctrine + Twig, так и Symfony + Eloquent + Blade (ну для примера).

        Чего не сказать о Yii, там надо довольно сильно помучаться, что бы выдрать AR из ядра, да и идеи Yii довольно сильно влияют на мышление разработчиков и перейти на Symfony им будет проблематично, надо весь мозг себе перестраивать будет.

        P.S. Это я по себе сужу, т.к. использовал немного Yii, перешёл на Laravel и скоро перебираюсь на Symfony, хотя и сейчас уже использую его компоненты вовсю.


  1. naghtigall
    03.04.2016 23:39
    +1

    Забыли старый, добрый Codeigniter. Он кстати готовится к 4 версии на РНР7


    1. Fesor
      04.04.2016 00:24

      К слову неплохая стратегия. Берем легаси на CI, мигрируем его на CI4 + php7, а затем постепенно снижаем связанность и заменяем CI на отдельные компоненты какие-то. Хотя в принципе можно пропустить этап с CI4.


  1. skiedr
    04.04.2016 00:47
    -1

    CakePHP 3.x


  1. stanlee
    04.04.2016 10:30

    Пока все пишут на том, что представлено в списке голосования, дальновидные люди уже давно пересели на Phalcon и Symfony3.


    1. Delphinum
      04.04.2016 20:03

      Помнится как дальновидные люди усилино изучали разработку под Kinect.


  1. remotemethod
    05.04.2016 00:23
    +2

    26% (560) Laravel 5
    27% (547) Yii 2
    Это как так получилось?
    Совпадение? Не думаю!


    1. tatu
      05.04.2016 01:24

      И правда, сначала и не заметил


    1. bardex
      05.04.2016 12:42

      наверное чурова взяли в штат


  1. alekciy
    05.04.2016 12:14

    Phalcon на PHP7, Yii2, чистый PHP.


  1. Saturnych
    06.04.2016 12:36
    -1

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


    1. stanlee
      07.04.2016 00:11

      Просвети что нынче не фигня?
      В рамках пэхапэ естественно )


    1. remotemethod
      07.04.2016 03:28

      Тоже имею интерес узнать, что нынче не фигня.


      1. M-A-X
        11.04.2016 13:12

        Фреймворки фигня, что непонятного? :)


        1. Fesor
          11.04.2016 13:21

          Для того что бы подобное утверждать, приведите формулировку «что есть фреймворк». А потом задумайтесь, может ли быть так, что фреймворка вообще нет?


          1. M-A-X
            11.04.2016 14:32

            а) фрейморки — это то, за что здесь голосовалось
            б) загугли:
            https://ru.wikipedia.org/wiki/Фреймворк

            Многие путают фреймворки с библиотеками, поэтому такая вырезка:
            Фреймворк отличается от понятия библиотеки тем, что библиотека может быть использована в программном продукте просто как набор подпрограмм близкой функциональности, не влияя на архитектуру программного продукта и не накладывая на неё никаких ограничений. В то время как фреймворк диктует правила построения архитектуры приложения, задавая на начальном этапе разработки поведение по умолчанию, каркас, который нужно будет расширять и изменять согласно указанным требованиям. Пример программного фреймворка — CMF (Content Management Framework), а пример библиотеки — модуль электронной почты.

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

            Другим ключевым отличием фреймворка от библиотеки может быть инверсия управления: пользовательский код вызывает функции библиотеки (или классы) и получает управление после вызова. Во фреймворке пользовательский код может реализовывать конкретное поведение, встраиваемое в более общий, абстрактный код фреймворка. При этом фреймворк вызывает функции (классы) пользовательского кода

            П.С.
            Накиньте чуток кармы, а то отвечать не могу. Нету сил ждать 1 час. :)


            1. Fesor
              11.04.2016 15:12

              фрейморки — это то, за что здесь голосовалось


              Вы же понимаете что это определение вообще ничего не объясняет?

              Многие путают фреймворки с библиотеками, поэтому такая вырезка:


              Многие думают что фреймворк и приложение неотделимые друг от друга понятия. Хотя фреймворк, это строительные леса для приложения.

              Было бы странно если бы мы строили дом, а строительные леса и инфраструктура были бы намертво впаены в стены. Случись что с инфраструктурой, например труба лопнула, пришлос бы ломать стены что бы добраться. Обслуживание такого дома будет явно обходиться сильно дороже.

              Словом распространенное заблуждение в том, что фреймворк влияет на архитектуру приложения. Это далеко не так. Нормальные фреймворки, вроде Zend, Symfony или Laravel, вообще ничего нам не диктуют. Основные архитектурные ограничения накладываются в отношении UI для нашего приложение, а последнее ничего не должно знать о UI (MVC там, разделение ответственности).

              ORM — это уже опциональные штуки. Они далеко не всегда нужны (например если мы используем mongodb — у нас нет связей а стало быть не нужны и ORM). Да и нормальный фреймворк предоставляет возможность выкидывать ненужные компоненты и заменять их своими.

              И даже если мы будем делать все на отдельных библиотеках, со временем у нас выростет прослойка между приложением и библиотеками (инверсия зависимостей), и эта прослойка и будет нашим фреймворком.


              1. Delphinum
                11.04.2016 18:07

                Нормальные фреймворки, вроде Zend, Symfony или Laravel, вообще ничего нам не диктуют

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


  1. m0Ray
    07.04.2016 04:43

    Drupal. Пока седьмой, потихоньку ковыряем восьмой.