Виктор
Это тривиальная проблема. Не вижу сложности
Не отрицаю. Вот только я пока не понял, как её лучше решить. Предложенные вами варианты имеют свои недостатки, о которых писал выше.
Павел
Они как раз сущности в другие штуки в формах превращают
Павел
https://symfony.com/doc/current/form/data_transformers.html https://symfony.com/doc/current/form/data_mappers.html
Павел
Тип можно видеть строку, а по факту это будет сущность
Виктор
Во, спасибо, Павел! Вот этого не нашёл почему-то. Буду читать, разбираться.
Виктор
Я понимаю, о чём вы говорите (Михаил, Павел). Что это не лучший вариант скорее всего. Что сделать что-то типа функции перемещения по галерее с выбором нужного фото или, допустим, вообще назначать обложку альбому из фото (как у меня было прежде) - это решение получше. Но поскольку это такой, скажем, учебно-практический проект, то раз уж я упоролся сделать так, то хочется разобрать, как именно это сделать) А потом попробую поиск с выбором)))
Михаил
Просто если Вы этот учебный проект будуте использовать как подспорье для устройства на работу, лучше чтоб он был максимально аутентичный. Формы когда весь стейт передавался из-за микро редактирования были в 90-x. Сейчас балом правят микродействия, патчи.
Виктор
Что это значит? Я просто использую FormBuilder.
Михаил
Я абстрактно. Форм билдер неплох, но для каких-то админок
Виктор
Так а как выглядят эти патчи? Допустим, я изменил имя в профиле. Как я отправлю только его?
Виктор
Или речь о SPA?
Aleksandr
через жс
Виктор
А FormBuilder как с ним взаимодействует? Я пока не видел. Типа, вот так же, только одно поле приходит и оно же записывается? $form = $this->createForm(AlbumFormType::class, $album); $form->handleRequest($request);
Виктор
Ну то есть понятно, что я с помощью fetch кидаю на бэк, а дальше как я это воткну в сущность с помощью FormBuilder?
Михаил
Технически тебе не нужно делать одну форму у тебя есть несколько точек взаимодействия фронта с беком 1) Настройка альбома (выбор имени, выбор заглавного фото) 2) Добавление фото в альбом 3) Настройка фото (теги, кропы, имя фото, геолокация) Короче не надо пилить всё это одной огромной фото, разделяй и властвуй. И строй API от потребности фронта
Виктор
Да, у меня они отдельные, так и есть. Смотри, хочу максимально пощупать все функции Симфони. Вот сейчас ФормБилдер ковыряю. Данный сайт в виде СПА у меня уже есть: на Реакте с беком на Ноде. Вот эту фигню хочу переписать на Симфони без использования упомянутых технологий. То есть вариант снова пилить SPA не рассматривается в данный момент. Сделать что-то ЖСом можно, но мне бы понять, можно ли это как-то завязать с ФормБилдером. Он с такими "патчами" работает? Или это просто отдельный рут нужен, который жсоны будет получать?
Михаил
А FormBuilder как с ним взаимодействует? Я пока не видел. Типа, вот так же, только одно поле приходит и оно же записывается? $form = $this->createForm(AlbumFormType::class, $album); $form->handleRequest($request);
Хз, как-то так #[Route(path: '/api/album/{id}', methods: ['PATCH'])] public function update(Request $request, Album $album): Response { $dto = new UpdateAlbumDTO(); $form = $this->createForm(AlbumType::class, $dto); $form->handleRequest($request); if (!$form->isSubmitted() || !$form->isValid()) { return $this->render('album/index.html.twig', [ 'form' => $form, ]); } $updateResult = $album->updateAlbumSettings($dto); return $this->render('album/update.html.twig', [ 'form' => $form, 'errors' => $updateResult->errors(), ]); }
The Ant
Всем привет! Не очень понимаю, как реализовать следующую логику (или так делать вообще не стоит?). Есть сущность Album. У данной сущности есть свойство thumbnail, представляющее собой ManyToOne с сущностью Photo. Есть форма редактирования альбома. В ней есть поле "Обложка", где отображается ссылка на текущую обложку в виде URI (например https://localhost:3000/photo/Fotografiya-1). Чтобы изменить обложку, нужно, соответственно, просто открыть нужную фотографию, скопировать ссылку и вставить в это поле. Собственно, что мне непонятно. Как правильно обработать юзер-инпут в этом поле? Сперва в buildForm сделал getter и setter для этого поля. В сеттере проверял, что юзер-инпут - это ссылка, парсил её, и пытался найти соответствующее фото. Если репозиторий возвращал не null (фото существует), то всё ок - сущность Photo сохраняю в поле thumbnail. Если нет, то ничего не делаю. Но это как-то криво, нужна же валидация, чтобы пользователь понимал, в чём дело? Ок, сделал валидатор IsPhotoUri. Но затупил и не подумал о том, что значение-то валидируется после того, как маппится в сущность. Получается, нужно дважды валидировать сперва в сеттере, затем в валидаторе? Короче что-то не могу найти конец, за который потянуть, чтобы эту ситуацию распутать. Подскажите, пожалуйста.
Просто передай ид выбранной фотки. Зачем копировать урлы, напрягать юзера этой дичью, валидировать домены и ТД. И т.п.
Виктор
Куда передать?
Виктор
Вернее, как юзер его передаст?
The Ant
Куда передать?
В штуку которая альбомом управляет, хз как там у тебя устроено
The Ant
Вернее, как юзер его передаст?
Просто выберет фото, кликом.
Виктор
Вопрос в том, как это сделать юзеру. Ему слаг из адресной строки копировать?
The Ant
Найми джсера на фрилансе, он тебе за банку пива сделает
Виктор
Просто выберет фото, кликом.
Да я не хочу этот вариант, уже обсуждали. 😆
Виктор
Короче, всем спасибо, ваши варианты тоже потом попробую реализовать. Пойду пока почитаю то, о чём Павел говорил - звучит интересно.
Nikolay
Формы это самое худшее, что есть в симфони. Для чего то простого типа админки их можно использовать, для всего остального будет боль
Aleksandr
Сонату видел
ну там тоже, если тебе нужно что-то чуть более сложное чем стандартный курд - уже танцы
Aleksandr
админки и бекофисы - всегда боль)
Михаил
изиадмин тоже самое. Причём определённые вещи объяснены на уровне рисуем круг, добавляем деталей по вкусу и вот сова готова.
Денис
Всем привет. Вопрос такой, у кого работа связана с симфой, какие у вас типовые задачи по проектам? Спрашиваю для понимания, что примерно нужно уметь, чтобы устроиться и пройти испытательный срок хотябы. А-то сейчас изучаю, материала много, а вот черты, когда уже можно претендовать на вакансию, не вижу(
Михаил
Сама симфа не важна, просто инструмент. В основном любые реальные задачи это 2 вещи: 1) укладывание бизнес задач в виде кода, алгоритма 2) решение пазла в виде встраивания нового кода в существующий код. То что касается фреймворков то: Научись быстро и чисто разделять логику между контроллером, сервисом, сущностью и репозиторием - вот 4 основных класса которые ты будешь постоянно трогать. Научись составлять запросы сначала чистые, потом через qb. Потестируй свой код через phpunit (постестируй как и юнит/интеграционными, так и функциональными тестами)
Павел
Формы это самое худшее, что есть в симфони. Для чего то простого типа админки их можно использовать, для всего остального будет боль
Ну "худшее" - вопрос, на них и соната, и изиадмин. Просто они довольно не тривиальны и чтобы их использовать прям мощно, надо в них ковыряться. Всякие кастомные js прикручивать, темы. Но это не новичковая тема.
Михаил
Сама симфа не важна, просто инструмент. В основном любые реальные задачи это 2 вещи: 1) укладывание бизнес задач в виде кода, алгоритма 2) решение пазла в виде встраивания нового кода в существующий код. То что касается фреймворков то: Научись быстро и чисто разделять логику между контроллером, сервисом, сущностью и репозиторием - вот 4 основных класса которые ты будешь постоянно трогать. Научись составлять запросы сначала чистые, потом через qb. Потестируй свой код через phpunit (постестируй как и юнит/интеграционными, так и функциональными тестами)
попробуй на тестовом проекте потрогать валидаторы, сериализаторы, ивенты и symfony messenger. валидаторы - хз, я их не использую но могут быть полезны сериализаторы - все воротят от них нос, но они по всюду ивенты - тоже повсюду symfony messenger - тоже повсюду, особенно когда начинаешь в обработку на заднем фоне и увеличение надёжности, производительности Но так, чисто потрогай. Их потом будет много, но пока выштуди основной стержень в виде: 1) контроллеры и роуты 2) сущности и репозитории 3) сервисы и di контейнер 4) как работает конфигурация, что за compile time у симфы
Павел
Ну чисто субъективно, худшее с чем я работал, эти админки тоже не огонь
Ну я формы сам не особо осилил, но чисто потенциально по функционалу из них можно лепить что хочешь. В той же сонате очень интересные компоненты есть и шаблоны, где из коробки работают one to many многоуровные, select2 с ajax. Но сами по себе формы куцые без коробки, безспорно. Даже простой one to many не сделать без каких то костылей из доки
Михаил
пока работал с первыми двумя, ВРОДЕ знаю, что это. 3 и 4 вообще не знаю, валидаторы, сериализаторы, ивенты и symfony messenger это тоже. Это база для любой mvc или чисто симфа?
Ну mvc вообще не про это, но в симфе оно до кучи. Короче пройдись по 1) контроллеры и роуты 2) сущности и репозитории 3) сервисы и di контейнер 4) как работает конфигурация, что за compile time у симфы А дальше трогай ивенты и то что я там тебе показал
Михаил
пока работал с первыми двумя, ВРОДЕ знаю, что это. 3 и 4 вообще не знаю, валидаторы, сериализаторы, ивенты и symfony messenger это тоже. Это база для любой mvc или чисто симфа?
что бы понять что ты это РЕАЛЬНО знаешь, создай новый проект с другим тестовым заданием и сделай без оглядки на старый
Михаил
Это у тебя должно выработать ещё и 1) укладывание бизнес задач в виде кода, алгоритма 2) решение пазла в виде встраивания нового кода в существующий код.
Денис
тогда не знаю
Михаил
Ну и просто успокойся, будущие наниматели знают что ты junior в симфе, просто попробуй делать так как принято и попробуй в процессе понять зачем так делается и будет тебе счастье
Денис
ну, в общем благодарю за развернутый ответ. Может ещё подскажешь, где, помимо книги, можно какой-то гайд пройти, а-то ихз в принципе не много, и один я прошел, он ппц мусорный какой-то
Денис
Ну и просто успокойся, будущие наниматели знают что ты junior в симфе, просто попробуй делать так как принято и попробуй в процессе понять зачем так делается и будет тебе счастье
меня взяли как того кто сможет помочь с wordpress потому что никто не хочет с ним работать, проекты закончились, решил симфу изучить, но за месяц вообще ничего путного не вышло, обещал вернуться, как начну разбираться)
Kelvin
Ищу разработчика на Symfony для реализации задач, для уже готового проекта. Уже подготовлено техническое задание, и хотел бы предложить вам ознакомиться с ним, чтобы вы могли оценить возможные сроки и стоимость работ. Ищем специалиста с уровнем Junior+ или Middle. Важно, чтобы вы имели опыт работы с Symfony и могли эффективно реализовывать задачи в соответствии с поставленными требованиями.
Виктор
Михаил
Несколько абстрактынй вопрос задам. По поводу стержня: какой уровень необходим для работы в нормальном проекте в качестве джуна? Суметь сделать какой-нибудь сайт клуба владельцев африканских ежей будет достаточно? Или нужно прям понимать, как это всё внутри работает?
Если вы хотите всё делать один, то определённый бекграунд конечно же ЖЕЛАТЕЛЬНО иметь. Вцелом нужно иметь какое-то подобие чувства кода, уметь проектировать вещи и понимать как работать с бд. Всё, можете хоть всё в контроллере писать на чистом sql. Дальше соответственно развиваться Если вы будете в команде, то просто нужно остроумие
Виктор
Я именно о Симфони говорю, конечно. Второй год уже работаю, но у нас чистый пхп. Хочу вкатиться в Симфони, и чтобы что-то интересное было. Разумеется, что-то интересное - это скорее всего в команде.
Виктор
Понимание общих принципов есть (по традиции и свой фреймворк делал, как и все)), опыт работы с очередями (симфони мессенджер, насколько я понял, это они и есть?). Но сейчас ковыряю Симфони и объем такой, что, как и товарищ выше, не понимаю, где та граница, когда можно на что-то рассчитывать.
Aleksandr
и доку наискосок
Aleksandr
и будет достаточно для начала
Александр
Но судя по твоим словам, можно уже пытаться в собесы) Спасибо за пост выше!
Я вообще пошёл работать на symfony даже не зная его))) Но хорошо знал чистый php, за 2 недели получилось вкатиться. Потом в течении 1-2месяцев добил знания все. Не сказать, что прям знаю всё, но в целом получилось. Главное чуточку упорства и времени.
Михаил
Я именно о Симфони говорю, конечно. Второй год уже работаю, но у нас чистый пхп. Хочу вкатиться в Симфони, и чтобы что-то интересное было. Разумеется, что-то интересное - это скорее всего в команде.
А, ну тогда всю базу надо знать точно, я думал вы вообще вкатун. База нужна что бы не бесить коллег вечными вопросами и что бы сосредоточится на впитывании бизнес особенностей и особенностей проекта, чем вопросами «почему запрашиваю сущность из репозитория, потом обновляю чистым sql, а потом снова запрашиваю но обновления нет» и «почему когда обновляю сущность, пишется лог в кафку» итп
Юра
Несколько абстрактынй вопрос задам. По поводу стержня: какой уровень необходим для работы в нормальном проекте в качестве джуна? Суметь сделать какой-нибудь сайт клуба владельцев африканских ежей будет достаточно? Или нужно прям понимать, как это всё внутри работает?
Лучше понимать как работает сервис контейнер. Потому что это центральная концепция симфони. В принципе можно и без понимания как это работает, но на реальных проектах достаточно часто встречаются задачи где нужно сделать что-то нетривиальное
Юра
Например разберись как сделать так чтобы можно было сделать модульное приложение где например роуты, энтити в разных банллах находятся и регистрируются автоматически
Юра
Скорее всего будет сложна самому разобраться, но если сможешь, много нового узнаешь
Юра
Можно сказать сразу на мидла прыгнешь
Виктор
Всем спасибо за советы! Направление примерно понял. Пойду разбираться с перечисленными вопросами.
Михаил
А разве бандлы это про модульность?
Сейчас бандлы это про пакеты. В допотопные времена бандлы это реально было про модули Сейчас чтобы сделать независимый модуль гораздо овладеть искусством инверсии зависимости и в целом всё.
Юра
Мне кажется это вредный совет
Юра
Если бандл заранее сделан в виде модуля, это облегчает навигацию по проекту, делает более явными разграничения и легко позволяет вынести бандл в пакет если вдруг понадобилось на нескольких проектах использовать функционал
Юра
Просто копируешь, пушиш в репозиторий и используешь в нескольких
Юра
А если все находится в папке src то это намного сложнее сделать и скорее всего никогда не будет сделано и все в итоге так и будет копится там в куче