Ответы пользователя по тегу Symfony
  • Как относится Laravel к Symfony?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Почему в Laravel много компонентов из Symfony? Laravel это форк Symfony?
    Я бы переформулировал немного. В Laravel много компонентов, авторами которых являются авторы Symfony. Видимо, так сложилось, что эти компоненты обладают достаточно высоким качеством или иными положительными качествами, которые разработчики Laravel сочли нужными/важными.

    Laravel это форк Symfony?
    Нет.

    Есть стандартный (аки стандарт) формат переносимого пакета. Такой пакет может использоваться практически в любом приложении (PHP-приложении, в данном случае). А Symfony - фреймворк модульный (а с версии 4 - ещё более модульный). В результате чего, симфони порвали на лоскуты разобрали на пакеты многие проекты/разработчики. Вот собственно, и результат...
    Ответ написан
    6 комментариев
  • Зачем нужны миграции?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Зачем нужны миграции?

    Если по хорошему, то реальное их практическое применение только в том, что бы создать структуру таблиц, например, при установке какого-то бандла. Допустим, у Вас есть бандл "Новости", что бы Вам "руками" не лезть в базу и не запускать, пусть даже готовый SQL - миграции помогут Вам сделать это в автоматическом или полу-автоматическом режиме.

    а если постоянно таблицу с дынными надо поддерживать в актуальном состоянии? не проще ли держать sql-dump этой таблицы в git/svn ?
    На счёт SVN'а (по моему, он вымер как класс, даже Hg/Mercurial почти не осталось) не скажу, но мы так и делаем, храним дамп базы в репозитории, в некоторых случаях даже используем хуки Git'а, которые сверяют версии БД и при изменении - переписывают соотв. файл дампа и добавляют его к комиту.

    И основная проблема (*исключительно в нашей практике) даже не столько в самих миграциях как таковых, а в ущербности их возможностей, в большинстве случаев. Не редко, миграции покрывают лишь малую часть возможностей БД, обычно это: основные типы полей, внешние ключи и индексы. Таких вещей как: триггеры, хранимые процедуры/функции, виртуальные поля, View'шки, типы данных свойственные конкретной БД или просто "не популярные" типы данных, такие например, как GEOMETRY - очень часто, в миграциях не поддерживаются. Так же, как например, я пока не встречал механизмов миграций, которые бы могли нормально создавать такой элементарный тип, как ENUM в PostgreSQL, не говоря уже про более сложные, составные типы и т.д.

    Касательно Symfony, она как и многие другие фреймворки, не поддерживает даже такой типа данных как "ARRAY", вернее то, что в Symfony называется ARRAY - это по факту строка, с сериализованым массивом, а не массив в "чистом виде", который (как тип данных) есть например, в том же PostgreSQL. В виду чего, было бы удивительно ждать чего-то подобного от миграций.

    Ни в одном серьёзном/крупно проекте, я пока не видел настолько безумного администратора БД, который бы позволил модифицировать "живую" БД с помощью механизма миграций на уровне фреймворка. Только SQL-код, после предварительного анализа.

    На основании всего этого, мы для себя сделали вывод, что миграции отлично подходят для автоматизации создания примитивных болванок в БД, например, тех же "новостей", не более того.

    P.S. Я знаю, что для БД существуют специализированные механизмы/программы, для контроля БД, включая данные. Детально пока не разбирался, но подобная возможность ("Контроль версий БД") заявлена, например, в программе SQL Manager for PostgreSQL (для Windows).
    Ответ написан
  • Как организовать временное хранение картинок?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Всё предельно просто.

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

    У Вас есть картинки, которые привязаны (должны быть) к какому-то объявлению, которое создаётся ранее. С помощью CRON'а, вы находите объявления, которые более не ликвидны (недоопубликованы например) и по простой связи находите их картинки и удаляете всё сразу (и объявления и картинки).

    Другой вариант: у Вас объявление создаётся позже, чем картинки. То есть, картинки некоторое время, до полного формирования объявления существуют в некоем вакууме. В этом случае, Вы добавляете каждой картинке поле - "дата загрузки" и выбираете все картинки, дата загрузки которых была более суток назад и которые не привязаны ни к одному объявлению (т.е. поле объявление_id == NULL).

    Всё это делается по CRON'у, который запускает какой-то метод контроллера (судя по тому, что Вы используете Symfony). Обычно эту задачу решает утилита wget, которую запускает CRON. Что бы предотвратить "случайные" запуски со стороны пользователей - можно добавить проверку по GET-параметру, содержащему какой-нибудь хеш.
    Ответ написан