• Как настроить deploy в Gitlab? Какая версия необходима?

    Я бы посоветовал завести себе какой-нибудь сервис для Continous Integration, например Jenkins.
    Он позволит несколько усложнить задачу (кто бы мог подумать, что усложнить - это что-то хорошее!), например:
    * Мониторит git / svn / hg / что угодно на предмет новой версии
    * Забирает новую версию
    * Прогоняет тесты
    * В случае невыполнения тестов отправляет провинившемуся разработчику push / email
    * В случае выполнения тестов выполняет деплой, и/или например отправляет артефакт в репозитарий, или образ докера в репозитарий.

    Для маленького проекта на 5 файлов, конечно, Jenkins это из пушки по воробьям, и тут наверняка лучше будет rsync (если применимо). Но чем больше проект и чем больше тестов и вариантов сборки, тем полезнее может быть Jenkins.

    У нас как только не используется: и собирает докер образы (в случае успешной сборки и тестов - в репозитарий), и собирает java-артефакты (аналогично, собрался - пошёл в maven). Собирает приложения на spring-boot, копирует их на целевой сервер, делает из них сервис и сам его перезапускает.

    Да, многое можно возложить на хуки, но:
    * хуки выполняются на компьютере разработчика (и зачем мне у себя выполнять 300 тестов при каждом коммите, если рядом специально обученный сервер стоит?). К тому же, бывали ситуации, когда что-то собирается на компьютере разработчика только потому, что у него есть какие-то локальные хаки. И потом приходит новый человек (или он меняет компьютер) и два дня только и делает, что настраивает себе всякое :). С отдельным сборщиком такого не бывает.
    * деплой и редеплой может запускать специально обученный PM, а не разработчик. Или вообще кто угодно.
    * Есть всякие красивые графики, что успешных тестов выполняется всё больше и больше, например. В любой момент PM может посмотреть, какие изменения были в каждой конкретной сборке.

    Видел всякие разные конфигурации, даже такую, когда для сборки проекта покупалась виртуалка на amazon, делала сборку и уничтожалась :) Вопрос лишь в извращённости сознания администратора Jenkins. Ну и, конечно, максимально хорошо он интегрирован с Java. JetBrains TeamCity, Atlassian Bamboo - в общем-то тоже.
    Ответ написан
    3 комментария
  • Как настроить deploy в Gitlab? Какая версия необходима?

    https://habrahabr.ru/company/softmart/blog/310502/
    Может быть это вам поможет.
    Ответ написан
    Комментировать
  • Шаблонизаторы ещё актуальны?

    riky
    @riky
    Laravel
    Smarty можно найти наверное только в древних проектах.
    Twig очень даже да. его киллер фича - extends главное его понять.
    Ответ написан
    4 комментария
  • Правильное оформление стилей. Лучше всё пихать в style.css или распределять по разным файлам?

    tomnolane
    @tomnolane
    профессиональный разработчик
    ИМХО: один файл style.css должен в себя включать всё (общее), что есть на других страницах (на всех). Если где-то css используется для слайдера (а он на одной/двух страницах) то лучше прикрепить отдельный css к этой html странице с css описанием это слайдера (мало ли, человек не зайдёт на эту страницу.. зачем ему грузить "лишнее"). И так по каждому... Но, если всё "вперемешку" и очень муторно так делить - то лучше всё тогда в одном css файле. Особо роли не сыграет на "скорость".. если конечно не описываете 10 000 html страниц... Сам лично делаю один главный css, отдельно css для слайдера (предпочитаю с помощью css3 делать слайдеры, а не через js) и т.д. "+" от этого - удобно искать и редактировать/добавлять то, что нужно. В вашем случае - больше "правильно", чем "неправильно". Хотя однозначно сказать никто не сможет.
    Ответ написан
    6 комментариев
  • Постраничная навигация php + Mysql?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    АААААААААА, опять открылись врата ада, разверзлись шлюзы говнокода и потекли реки нечистот на просторы тостера...
    Ответ написан
    Комментировать
  • Как перенести проект с Codeigniter на Yii2?

    @xfg
    Нужно писать бизнес-логику независимой от фреймворка. Обкладывая доменную модель интерфейсами со всех сторон. Тогда при переезде на любой другой фреймворк переписать придется только реализации этих интерфейсов, контроллеры фреймворка, которые должны состоять из 2-3 строк кода и вьюшки. Можете погуглить и посмотреть реализации DDD архитектур например.

    Но сейчас нет выбора, нужно пересматривать каждый кусок кода, который делает обращения к codeigniter. То есть по-сути заново написать проект. На Yii2 тоже 99% пишут зависимый от фреймворка код. Можно перед переездом почитать что-то по архитектуре и сделать БЛ максимально независимой от фреймворка. Чтобы в будущем здесь не появился очередной вопрос "Как перенести проект с Yii2 на Symfony?".

    Но не всегда это оправдано. Это не быстро и не для простых crud проектов. Поэтому возможно будет выгоднее с каждым переездом на новый фреймворк переписывать проект, если он относительно не сложный, чем пытаться выстроить архитектуру вокруг всего этого.
    Ответ написан
    Комментировать
  • Как вы меняете технологии в долгоиграющем проекте?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    1. Выбирается модуль в системе
    2. Создаётся его копия на новой системе/технологиях
    3. Отлаживается, настраивается, адаптируется для основной.
    4. Старый - отключается, новый - включается в продакшн.
    5. GOTO 1.

    PS: Ни в коем случае не выделяем микросервисы! Это нарушит целостность смежных архитектур внутри системы! Меняем - только функциональными блоками, которые работают по заранее определённой и отлаженной схеме бизнес-процесса.
    Ответ написан
    4 комментария
  • Какой должна быть структура таблицы i18n?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Я обычно делаю переводимые токены строками таблицы, а языки - колонками. Добавляются языки очень редко, а работать с такой схемой гораздо комфортнее.
    Ответ написан
    2 комментария
  • Как избавиться от привычки усложнять задачу?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Делите на базовый и расширенный функционал.
    Базовый - это тот минимум, без которого невозможно пользоваться системой.
    Расширенный - то, что можно "навесить" после запуска основного.
    Ответ написан
    Комментировать
  • PHP фреймворк для начинающего разработчика?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Фреймворков в целом, которые достигли должного уровня популярности и народного признания - не так уж много (если говорить о PHP-фреймворках).

    Для начинающего, с целью понять сущность MVC, "пощупать" некоторые аспекты фреймворка, такие например, как загрузка библиотек и пр. подобности, я бы порекомендовал Вам CodeIgniter. Отличная документация, довольно много людей, кто сможет Вам ответить на возникающие вопросы, есть документация на русском. А так же, минимальное количество "лишнего" из коробки, например, шаблонизаторов (которые Вы можете самостоятельно подключить, если очень хочется).

    После этого фреймворка, промежуточным, можно было бы считать Kohana, но, он что-то то "умирает", то снова "воскресает"... С документацией на него, по моему, всё так же плохо (читай "не очень хорошо") как и всегда... но, по нему есть несколько неплохих видео-уроков.

    Суда же можно отнести Yii, на мой взгляд, он застрял где-то между "большими" и "маленькими" фреймворками. Маленьким его уже не назовёшь, по ряду признаков, а до большого и целостного - он ещё не дотягивает. Но, он довольно популярен на просторах бывшего СССР (по понятным для многих причинам), в виду чего имеет довольно большое русскоговорящее сообщество и целую толпу ярых фанатов.

    Далее, в обязательном порядке будет идти Laravel - превосходная документация, примеры и фантастическое количество видео-уроков (если хорошо понимаете английский). Отличный фреймворк собранный на базе Symfony. Относится уже к "большим".

    Ну а когда станете совсем матёрым программистом, и "лишний" код будет писать уже не в моготу, когда изучите все основные аспекты разработки, в том числе "сервис контейнеры", "внедрение зависимостей", будете понимать основные сетевые протоколы на низком уровне... а качество и разделяемость кода - будет одним из приоритетных условий - рекомендую обязательно ознакомиться с Symfony. Уроков по нему, довольно небольшое количество, вменяемого материала на русском языке - практически нет вообще... Но, достаточно легко изучается когда есть хороший багаж знаний и опыт работы с другими фреймворками.

    P.S. Я понимаю, что Вы спрашивали "какой фреймворк учить первым?", а не какие они бывают вообще. Но, дабы предостеречь Вам от вопросов типа "какой фреймворк учить вторым?" или "почему Symfony в роли первого фреймворка так тяжело изучать?" и массы прочих подобных - озвучил одни из самых популярных фреймворков в мире веб-разработок в ракурсе PHP.
    Ответ написан
    1 комментарий
  • Как добавить метод к классу если переопределить класс нельзя?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    завернуть работу с этими сервисами в еще один сервис который собственно будет выступать фасадом и скрывать всю грязь что вы делаете что бы было удобно.
    Ответ написан
    1 комментарий
  • Какой паттерн проектирования лучше использовать для работы со скидками?

    @SergeyZelensky-Rostov
    Как это лучше всего сделать, не прибегая к куче foreach и if.

    Реализовать на уровне бд
    Ответ написан
    1 комментарий
  • Как использовать $app->params в моделях?

    @springimport
    Наверное, стоит сделать конфигурационный класс который будет передаваться в модель.

    Нужно еще подумать над соблюдением SOLID.
    Ответ написан
    Комментировать
  • Можно ли сохранять в git папку vendor после composer update?

    Можно, но смысла нет.
    Вместо этого в гит мы кладём composer.lock и повесили гит-хук, который делает composer install при merge и checkout.
    После этого проблему как рукой сняло.
    Ответ написан
    2 комментария
  • Как сделать перенаправление на страницу инсталляции приложения?

    alsopub
    @alsopub
    Как вариант:
    if (file_exists('install.php')) {
      header('Location: /install.php');
    }

    Это если в install.php не используется роутинг.
    Ответ написан
    Комментировать
  • Как быть с виджетами?

    Каждый виджет - отдельный класс, унаследованный от общего класса Widget.
    Ответ написан
    1 комментарий
  • Как подружить git и denwer?

    @DenJel
    создайте файл .gitignore в корне, напишите там правило: игнорить все, кроме www. Что-то типо:
    **
    !www


    Гуглите glob gitignore
    Ответ написан
    1 комментарий
  • Как правильно работать с большими таблицами?

    @kifirch
    Лучше выбирать по 1000/5000 записей получать максимальное значение id (PK) и идти дальше, смещаясь по primary key. where id > ? limit 1000 order by id asc
    Limit/offset не гуд на больших объемах - так как, к примеру, offset 10000 limit 1000 переберет 10к строчек чтобы отдать 1000
    Ответ написан
    Комментировать