• Что принципиально отличает Symfony 5 от Laravel 8?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    1. Прежде всего нужно понимать, что любой Framework, в руках хорошего разработчика будет жить долго и хорошо.
    2. Framework — это инфраструктура. Framework не предоставляет Вам готовый код и не задаёт архитектуру, он предоставляет Вам низкоуровневые инструменты или их быструю интеграцию, в которых нет необходимости писать с нуля под каждый проект. Хотя, ради практики, было бы не плохо попробовать это сделать, чтобы разобраться в данном вопросе, но сейчас не об этом. Исходя из этого Ваш код должен быть независим от какого-либо Фреймворка. Устарел Yii2 framework —поменяли контроллеры, немного инфраструктуры и код работает уже на Symfony или Laravel. Это касается не только Фреймворков, любая сторонняя библиотека должна быть изолирована от прямого использования. Это позволит Вам быть более гибче и сделает Ваш код менее связанным и зависимым.
    3. Оба Фреймворка популярны и имеют право на существование. У всех разный порог входа, разное сообщество и разные решения. На Symfony код пишется чуть сложнее и дольше, так как нет привычных фасадов. Многие компоненты и Фреймворки используют компоненты Symfony в виде своих обёрток. Однако, нужно понимать, что Фреймворк задаёт немного стиля в разработке, у Symfony этот стиль более правильный и строгий. Поэтому, использование Symfony интуитивно подталкивает Вас к написанию более чистого кода, без погружения в различные паттерны.
    4. Doctrine — это НЕ тот же Eloquent. Это совершенно разные вещи!
      Eloquent —это анти паттерн Active Record, а Doctrine это паттерн Data Mapper. Если речь идёт о быстрой разработке и не долгоживущем или небольшом проекте, то можно взять и её, однако на долгий срок лучше использовать Data Maper типа Doctrine, Cycle. При таком подходе ваши поля «не торчат» напрямую из базы данных в код. При изменении столбца в БД — его не придётся менять по всему проекту. Для Data Mapper подход — Code First (Вначале код), а для Active Record — Table Fist (Вначале таблицы). При использовании Data Mapper мы не думаем как будут храниться наши данные в БД, не думаем какая будет БД, что не скажешь по AR.

    Тема фреймворков на Q&A поднимается очень часто. Лично мне приходилось много раз отвечать на подобные вопросы. Вы можете сами в этом убедится по моим ответам:

    Поэтому, серьёзно к таким вопросам здесь не относятся. Чтобы понять разницу — Вам, очевидно, нужно попробовать оба Фреймворка в разных ситуациях. Со временем Вы сами всё поймете. А если Вас устраивает Laravel и не предвидится какого-то большого развития — пользуйтесь. Пару строк кода можно написать и без какого-либо Фреймворка. Главное — результат и правильно подобранный инструмент.
    Ответ написан
  • Какой подход программирования на PHP выбрать в 2020 году?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    Как вы поняли, на этот вопрос сложно ответить кратко. В программировании, на любом языке большой список материалов изучения, который постоянно пополняется. Всё зависит от Ваших задач и задач Ваших клиентов. Для кого-то главный фактор - быстрота разработки. Для кого-то — простота. Для кого-то стоимость разработки. Для кого-то важна развиваемость проекта написаного кода. Например, есть люди, зарабатывающие настройкой и поддержкой проектов на Wordpress. Поэтому я бы выделил такой путь программиста на PHP:
    1. Самописный код
    2. CMS (Wordpress, Joomla)
    3. Разработка на фреймворке
    4. Разработка на микрофреймворке

    Так как Вы раньше использовали подходы CMS Wordpress, то Вам стоит пойти на следующий этап — разработка на фреймворке. В этом Вы совершенно правильно мыслите.

    Фреймворк (framework, «каркас», «конструкция») — это динамически пополняемая библиотека языка программирования, в которой собраны его базовые модули. Фреймворки создаются для упрощения процессов разработки приложений, сайтов, сервисов. Чтобы не писать модуль в приложении с нуля, гораздо проще обратиться к готовым шаблонам фреймворков, которые и формируют рабочую среду разработчика.

    Достоинства PHP-фреймворков:

    • Производительность. Фреймворки ускоряют разработку. Например, PHP-фреймворк избавляет вас от необходимости писать запросы к базам данных. В фреймворках реализованы базовые функции CRUD, которые необходимы для работы с базами данных.
    • Масштабируемость. Написанные на фреймворках приложения легко масштабируются.
    • Удобство. Код фреймворков лаконичный, поэтому с ним просто работать. Поддерживать легче проект на фреймворке, чем на нативном PHP.
    • Простота. В PHP-фреймворках используются шаблоны проектирования (например, MVC). Это значительно упрощает разработку, делая процесс быстрее.
    • Безопасность. Приложения на фреймворках лучше защищены, чем приложения на чистом PHP.
    • Экономичность. В фреймворках реализован принцип DRY. Это позволяет разработчикам писать меньше кода.

    Какие есть PHP фреймворки для новичков?

    Конечно, PHP фреймворков больше, но не все подходят новичкам. Поэтому, можно выделить два популярных фреймворка у новичков:
    1. Laravel
    2. Yii2

    Путь к изучению фреймворка:

    1. Почитать документацию PHP. Начиная изучение с прочтение документации у вас отложится в подсознании какие-то «якоря», которые будут у вас всплывать в процессе изучения и которые помогут быстро находить в документации нужную информацию. Как минимум вы будете знать, что такое есть, а то некоторые узнают о функциях php спустя многие года. Это позволит вам использовать полноценно функционал, а не ограничиваться пару функциями из примеров.
    2. Изучить ООП. Программировать на PHP можно двумя подходами: функциональным и объектно ориентированным. Последний более популярный и распространенный. Фреймворки написаны используя этот паттерн. Поэтому, перед изучением фреймворка нужно иметь понимание этого подхода. Посмотрите «Неделя ООП» от Дмитрия Елисеева и попробуйте написать свой ООП-код
    3. Установить фреймворк. Начните с установки фреймворка и попробуйте разработать что-то простое, например, Блог или Новости. Yii2 совсем не сложный. Читая документацию, даже без знаний программирования можно сделать что-то простое.
    4. Задаваться вопросами и находить на них ответы. Дальше у вас будет возникать много вопросов. Постарайтесь сначала самостоятельно находить на них ответы: гуглите, смотрите документацию, а уже потом спрашивайте у сообщества.
    5. Перепишите сайт на другой фреймворк. Попробуйте созданный на Yii2 проект переписать на другой современный фреймворк: Laravel или Symfony. Вы получите хорошую практику и навык, который Вам так же поможет в будущем.

    Почему Yii2 подойдёт новичку?

    • Потому что в Yii2, за последние 5 лет, ничего не поменялось. С одной стороны — минус, для изучения — плюс. Ответов и решений полно и они не устарелые, а значит рабочие. Вы хоть что-то сделаете без особых знаний и навыков. Для учебы Yii2 хватит, но не для нового проекта. Как подрастете — возьмёте современный фреймворк или перепишите на Yii3 который будет в конце 2020 или начале 2021.
    • Потому что Yii2 — это RAD фреймворк (для быстрой разработки). Это значит, что в этом фреймворке заложены принципы простоты и быстроты разработки. Для сложных проектов это проблема, а для Вас же — плюс.
    • Потому что он монолитный. Вам не придётся устанавливать кучу дополнительных пакетов, включая библиотеку UI на Bootstrap, jQuery . Вы сможете быстро установить и начать пользоваться Yii фреймворком
    • Потому что Yii2 может сгенерировать код по базе данных используя UI. В Yii2 есть Gii генератор, который прямо по схеме базе данных генерирует вам код в визуальном режиме, поэтому программисты работают быстрее, что не только экономит время, но и уменьшает стоимость разработки.
    • Потому что Yii2 имеет большое русскоговорящее сообщество и целую толпу ярых фанатов.
    • Потому что Yii2 быстрый и безопасный. В этом инструменте также заложен принцип Don't repeat yourself, т.е. неповторения кода. А с помощью Ajax и JQuery фреймворк облегчает создание высокомасштабируемых веб-приложений. Хотя и jQuery в 2020 году устарела.

    Критика в сторону Yii2:

    • Тенденции 2020 года — писать чистый код на голом PHP с переносимыми компонентами, не привязываясь к канонам какого-то конкретного фреймворка. Чтобы в итоге не стать заложником одного фреймворка. Yii2 не следует этим канонам. Фреймворк внутри на 99% противоречит SOLID.
    • Yii2 вышел в 2014-ом году как немного переписанная версия Yii1.1 из 2011-го. Он до сих пор ориентируется на PHP 5.4. Все шесть лет он архитектурно не развивался. С 2018-ого его разработка заморожена. Так что сейчас Вы начнёте практиковаться на заброшенном два года назад фреймворке шестилетней давности, написанном по канонам Yii1 девятилетней давности. Если выйдет Yii3, то там многих из этих канонов уже не будет. Если это одноразовый проект, который один раз написали и забыли, то делать можно на чём угодно и как угодно. Но если проект делают надолго, то чтобы обезопасить себя от сложности таких постоянных переписываний выбирают сразу более свободные и независимые подходы.
    • Для классического frontend — фреймворк всюду тащит свои встроенные ассеты с jQuery. И чтобы перейти на WebPack надо это из всех мест вычищать. А если делать отдельный JS-фронт, то для построения API половина фреймворка оказывается не нужна.
    • Если вам хватает технологий Yii, JQuery и PHP 5.4 шестилетней давности, то получайте удовольствие. Если нравится свежий подход с настоящим DI-контейнером, типами PHP 7.4, PSR и свежим JS/TS с WebPack.
    • Версии Yii 2.1 фреймворка не планируется. Всё обратно несовместимое в 2.0 не проходит. Переход на Yii будет очен затруднён или вовсе невозможен.

    Подитожим. Ваши знания находятся примерно на уровне 2015-2016 годов, как мне кажется. И тут Вам придется решать самому: либо пойти по плавному развитию, пробуя сначала Yii2, со старыми подходами, но ближе к вашим знаниям, а потом перейти на Laravel или Symfony, либо сразу пойти в 2020 год и использовать Laravel или Symfony, которые соответствуют современным подходам, но дальше от Ваших знаний. Можете попробовать установить все и решить для себя на каком фреймворке будете проходить изучение.

    Рекомендую к прочтению:
    Ответ написан
    3 комментария
  • Как создать коллекцию файлов FileList?

    zkrvndm
    @zkrvndm Автор вопроса
    Архитектор решений
    Лайфхак для создания коллекции файлов FileList:
    // Создадим простой текстовый файл:
    var data = 'Здесь текст для файла или положите в переменную Blob';
    var file = new File([data], 'primer.txt', {type: 'text/plain'});
    
    // Создаем коллекцию файлов:
    var dt = new DataTransfer();
    dt.items.add(file);
    var file_list = dt.files;
    
    console.log('Коллекция файлов создана:');
    console.dir(file_list);
    
    // Вставим созданную коллекцию в реальное поле:
    document.querySelector('input[type="file"]').files = file_list;

    В переменную data вместо текста, можно положить в том числе и Blob - это особенность функции new File() которая первым параметром может принять как массив из текстов, так и массив из Blob.

    Фактически лайфхак выше позволяет нам JavaScript-ом скачать любой какой угодно файл со своего сайта и вставить его абсолютно в любое поле <input type="file"> - что просто архиполезно для браузерных ботов.

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

    Огромное спасибо пользователю Mmx Symfony, который нарыл это решение где-то в недрах иностранных сайтов. Сам я в свое время сколько не искал везде был ответ, что это невозможно, а оказалось, что нихрена подобного =)
    Ответ написан
    8 комментариев