Первый проект для изучения PHP фреймворков — что делать?
Хочу разобраться в каком-нибудь популярном (на фрилансе, у работодателей) фреймворке. То есть понять архитектуру классов, что зачем придумано и как работает.
До этого писал свою простую CMS с нуля в процедурном стиле. ООП знаю, но не знаком с паттернами, то есть я о них читал, но понимания это не прибавило т.к. не понятно, какие реальные проблемы они решают в реальном проекте, поэтому не всё так просто.
Встаёт 2 вопроса: какой фреймворк лучше выбрать - Yii2 vs Laravel?
И какой проект лучше всего подойдёт в качестве первого учебного на этом фреймворке, но чтобы у него был какой-никакой потенциал для развития (не блог!), а ещё лучше и коммерческий потенциал/общественная польза? Может быть, не хватает какого-то специфичного сервиса или агрегатора?
Хотелось бы так, чтобы можно было начать с малого и простого, и в дальнейшем добавляя возможности изучить максимум внутренностей фреймворка.
Также буду признателен, если поделитесь годными ссылочками по организации рабочего процесса под фреймворк. Сейчас использую phpstorm, но далеко не все его возможности.
С Yii2 не советую начинать обучение. В качестве обучения возьмите Laravel5.2 или symfony3 или zend3, все что угодно но не в коем случае не Yii2. Иначе у вас будет не правильное понимание OOP, SOLID и еще многих бестпрактик.
Что касается паттернорм, в принцепи невозможно написать хороший код с длительным обслуживанием без: PSR, DI, Repository, Entity/DTO/VO, тестов и тп. Поэтому если вы не знаете хотя-бы одно из этих слов, прежде чем что-то писать и учить, прочитайте книгу по ООП. Иначе ничего хорошего вы не напишите.
Dave: Yii::$app - божественный обьект (анти-паттерн) - да, но работает и удобно, так же как и behavior, которые намного удобнее трейтов. Если рассматривать что ближе к стандартам, то yii2 не айс, но на мой взгляд из таких проектов появляются новые стандарты в дальнейшем. Главное что все работает, работает быстро и без ошибок.
Максим Тимофеев: Работает удобно когда у вас сайт уровня блог или небольшой портал, где 1 - 2 человека в команде. Если вы заходите хорошую архитектуру для длительной разработки, вам придется выкинуть 80% от Yii2. Ну и вообще там много статики, стремные виджеты и основная задача Yii2 это RAW-разработка. Это хороший инструмент, но использовать его нужно осторожно имея опыт, чтобы понимать, чего можно ожидать.
nepster09: Опять таки и виджеты и актив форм весьма удобные штуки. Мне кажется Вы сильно фанатично относитесь к стандартам. Шаг влево шаг в право расстрел? Тогда как прогресс будет двигаться. Да и в laravel там много кривых реализаций, не очень глубоко его знаю, но находил много "шагов в сторону". Я думаю если проект очень крупный и есть желание соблюсти все стандарты - не стоит брать framework. Framework - это удобно и быстро. Не стоит его мерять проектами типа facebook
Максим Тимофеев: Я около 3 лет с альфы просидел на Yii2, и скажу, что без определенного опыта можно дел наделать. А когда кода будет очень много, там обеспечена путевка в ад. Что касается laravel5, там чуть ли не на каждой страницы доков редирект на DI с утверждением, что без него нормального проекта не собрать. Сообщество чуть по сильнее, есть много примеров и реализаций в сторону сервис леера.
Что касается Yii2 - это raw разработка, там можно писать например по тому-же DDD, но не целесообразно.
Ларавель это что-то среднее. Там тоже можно писать быстро как в Yii2, но и в дебри ооп тоже можно мокнуться.
Что касается АР, в Yii2 он по интереснее и жирнее будет, но что касается стандартов и бест практик тут laravel идет вперед.
+ когда я писал 3 года на yii2 и перелез на laravel5, у меня было ощущение примерно такое:
"Какого хрена я не делал некоторые вещи так в Yii2 ?".
nepster09: Может Вы просто не умеете его правильно готовить? Я не с альфы, с релиза, но пока не вижу особых различий с laravel. Там есть пара плюшек, связи например в laravel интереснее и удобнее, но по моему это дело вкуса. В любом случае я против Вашей категорической позиции "на yii учится нельзя". Можно, даже где-то удобно, учитывая доки отличные. Просто изучая иметь в виду, что это не всегда best practices.
Максим Тимофеев: ну yii слишком много позволяет и разрешает. Laravel5 по факту тоже, но доки laravel5 более-менее направляют в нужное место. Но и то, я щас в сторону симфони смотрю, мне чото архитектура нравится такая более-менее дддешная. Я когда кодил на yii2, где-то понимал в фоне, что-то то мне не хватает, но не знал что именно. Вот щас понимаю, что это Service Layer. Для DDD еще не созрел, да и команда не потянет, а вот Service Layer должен зайти.
nepster09: Думаю пора завершать диалог, пока у автора не взорвался мозг. Было приятно поспорить с умным человеком)) Тоже давно поглядываю на symfony, но все времени нет.
Егор Неведов: Симфони, это сложноватая штука, но сразу открывает глаза на правильную архитектуру и множество крутых штук и паттернов. Сам я серьезное еще не копал данный интсрумент, а так просто игрался с оф. докой на уровне вывода "Привет Мир!". Но погуглив, можно найти вот это files.abradabra.com/books/Symfony2_ru.pdf 3 версия от второй походу не сильно различаются.
Оба хорошие, у всех есть будущее и все они достойны внимания, трудно сказать какой из них лучше подойдёт для первоначального ознакомления.
Yii уже довольно "мудрый" по этому очивидно что по нему больше примеров и доков.
Laravel "молодой но крайне перспективный" потому что впитал в себя всё хорошее из всех основных фреймворков до него, и я уверен его ждёт большое будущее.
Но если нужно попадать в заказы на фрилансе, то лучше сразу начинать с symfony, потому что на нём их больше всего, это факт.
А самое правильное будет поизучать их все и выбрать тот, который ближе по душе)
А как у symfony со стабильностью / поддержкой сообщества / развитием? Больше заказывают под разработку или поддержку?
Со временем наверное поизучаю несколько, но с чего-то надо начинать, время дорого)
nepster09 В основном по делу сказал, но вот Laravel - погорячился. Хотите качественный фреймворк - Symfony, Zend. Из маленьких фреймворков могу посоветовать Silex.
Встаёт 2 вопроса: какой фреймворк лучше выбрать - Yii2 vs Laravel?
Symfony
...а ещё лучше и коммерческий потенциал/общественная польза?
Symfony
Может быть, не хватает какого-то специфичного сервиса или агрегатора?
Ну это вам писать, так что не хватает того, что сможете реализовать))
Хотелось бы так, чтобы можно было начать с малого и простого, и в дальнейшем добавляя возможности изучить максимум внутренностей фреймворка.
Вообще говоря под такой запрос подходит в принципе любой.
Также буду признателен, если поделитесь годными ссылочками по организации рабочего процесса под фреймворк.
Егор Неведов Можете в сторону docker + docker-compose посмотреть. Vagrant правда для разработки удобнее.
То, что вам 4gb RAM хватает - чудо в 2016. Мне 16 бывает впритык))
Докер вставляет в процесс дополнительный уровень: связи между вашими контейнерами. Это помимо того, что ваше приложение должно знать о том, что где лежит. Контейнеры по своей идеологии должны быть иммутабельны, процесс разработки же требует постоянных изменений.
index0h как ни странно, кроме виртуалок - проблем не испытываю. На 10ку и хром я переходить не буду точно, в игрушки не играю, так что даже и не знаю, чем ещё забить 16гиг)
А насколько необходимы всё же виртуалки? Если без них, и пока всего 1 проект, то какие минусы? Ведь, я так понимаю, они удобны тем, что под каждый проект полностью своя среда, и гарантия ожидаемой работы за счёт этого, верно?
Егор Неведов
> А насколько необходимы всё же виртуалки?
1 проект === 1 окружение === 1 виртуалка. У меня так практически все проекты (исключения бывают но редко). Пример: вам что-то потребовалось из проекта, в который вы не заглядывали год. Подняли окружение (5 мин), потыкали что надо, виртуалку можно уничтожать, проект с вагрантом останется. Без вагранта/докера - у вас это просто не выйдет.
Если вы работает в команде, единое окружение разработки - это святая святых. Сэкономите тьму времени.
> Если без них, и пока всего 1 проект, то какие минусы?
Да не вопрос, у вас допустим ubuntu, у вашего коллеги-фронтендщика - винда, а сервера под FreeBSD. Пакеты, на которые вы ориентируетесь под своей ОС, под фряхой могут в принципе отсутствовать. При выкатке своего детища вы с большой вероятностью можете обнаружить, что оно не работает.
Если же вы один на проекте и ваше ПО максимально близко к проду, ну что я рад за вас, но вы того, не забывайте, что менять свое окружение вам стоит синхронно с продом. Это такие себе кандалы. Если дома захотите поднять проект - не стоит забывать обо всех нюансах настройки, конкретно под этот проект.
> Ведь, я так понимаю, они удобны тем, что под каждый проект полностью своя среда, и гарантия ожидаемой работы за счёт этого, верно?
Да, верно.
Нет смысла браться за что-то большое и значимое без багажа знаний. Более толковые программисты ваш код мочой обольют и пользоваться не станут из-за его низкого качества, да даже вы сами через полгода ужаснетесь, взглянув на ваш код. Хорошие пакеты рождаются, когда хорошему программисту нужно что-то с гитхаба, а этого чего-то там нет. Хорошие программы - когда вы крутитесь в определенной сфере продолжательное время и опять же ни вы ни коллеги не имеют удобного инструмента. Нужды разработчиков на данный момент вы удовлетворить не сможете (а на тостере в основном именно они и сидят). Пройдитесь лучше по форумам любимых вами тематик, посмотрите, что требуется людям (на тех же сеофорумах часто просят различные скрипты, может напишете свой аналог лайвстрит или открытый аналог церебро), понаблюдайте за тем, что предлагают различные проекты в разных сферах и попробуйте мысленно перенести их на другие сферы (удобные каталоги одинаково хорошо работают и в свадебных тематиках и для салонов красоты). Поищите заказы на фрилансе, отличные от визиток.
Спасибо за мнение. Я понимаю, что и сам ужаснусь и не раз, и не только через пол года, но неправильный я какой-то - это меня не пугает) Первый свой проект (не web) я переписывал 17 раз, и... нисколько не жалею, зато мне было это интересно, и проект хоть и бесполезный в коммерческом плане, но уникальный, не очередной велосипед. Пока так вышло, что начал с WebAssyst, пишу небольшой интернет-магазин. Закончу - вернусь к Symfony - Laravel, и буду писать свой небольшой портал по интересной теме.