«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2021/04/22 20:32:52  №2005048 1
Блин, да что сделать с Симфони формами, чтобы я мог в ChoiceType добавить с помощью js какой-то кастомный <option>, и он у меня в результате не отсеялся и прошел валидацию?
На стаковерфлоу нагуглил какие-то полтора наркоманских совета, которые на практике не работают. Не верю что в таком продуманном большом фреймворке могут быть настолько анальные ограничения.
Ответы: >>2007526
Аноним 2021/04/24 20:03:34  №2007526 2
>>2005048
Бамп вопросу, еще актуален. Или серьезно никто в мире не знает, как обойти такое идиотское ограничение?
Ответы: >>2007528 >>2007568
Аноним 2021/04/24 20:04:26  №2007528 3
Ответы: >>2007530
Аноним 2021/04/24 20:07:04  №2007530 4
>>2007528
Ты про симфони или про пхп?
Ответы: >>2007531
Аноним 2021/04/24 20:07:28  №2007531 5
Ответы: >>2007533
Аноним 2021/04/24 20:11:31  №2007533 6
>>2007531
В смысле если ты с ними решишь на фронтенде что-то делать, это будут сплошные костыли и боль. No way
Ответы: >>2007538 >>2007570
Аноним 2021/04/24 20:15:24  №2007538 7
>>2007533
хотя если тебя не смущают костыли и лапша которую трудно разобрать как она отрабатывает и готов дебажить сутками то смотри в сторону https://symfony.com/doc/current/form/events.html
Аноним 2021/04/24 20:41:38  №2007568 8
>>2007526

ChoiceType - это не внешнее представление (селект). Это виджет, в котором есть выбор из набора разрешенных вариантов и другой передать нельзя. (хотя, конечно ты можешь создать свой виджет наследованием от него и там отменить это ограничение, но это будет неправильно).

То, что тебе нужно - это TextType - виджет, который принимает любой текст. Просто при выводе надо выводить его не в виде инпута, а в виде селекта. Для этого ты наследуешься от него (в серверной логике менять ничего не надо) и делаешь свой тип ComboboxType. Для него делаешь свой twig шаблон, в котором делаешь вывод селекта + возможность ввести произвольное значение с помощью скрипта.

Так ты получишь виджет, который можно потом добавить в любую форму.
Ответы: >>2007590
Аноним 2021/04/24 20:43:36  №2007570 9
>>2007533

Может быть, ты просто не разобрался как следует? По идее ты можешь создавать любые кастомные виджеты, а также менять представление для любых встроенных виджетов. Формы Симфони очень кастомизируемы.
Ответы: >>2007593
Аноним 2021/04/24 21:04:21  №2007590 10
>>2007568
Спасибо огромное, ты лучший. Подозревал что-то такое, но даже примерно не понимал как это реализовать.
Ответы: >>2007594
Аноним 2021/04/24 21:05:23  №2007593 11
>>2007570
На сколько я помню у меня всегда были трудности сделать динамическое поведение. В этих шаблонах макросы пишешь, как этот блок спрятать, как тот блок после редиректа показать. То бля блоки жаваскриптом прячешь, то шаблонах условия прописываешь. И все это еще в контроллер просачивается, разные флаги, чтобы управлять поведением формы. Все время дебажишь какая фигня из формы прилетела в листенеры. Коллекции колекций в коллекциях. Сами формы отвечают за все. За валидацию, за рендеринг шаблонов, за заполнение из запроса модели со всеми связями. По разумному там что-то совсем простое можно сделать.

Убежал в разделение на фронтенд и api и восстановил свое душевное равновесие.
Аноним 2021/04/24 21:07:39  №2007594 12
>>2007590
Рано радуешься. Симфони формы это нарушение принципов грамотной архитектуры как минимум.