2015-08-12 3 views
2

Я создал собственный тип формы в symfony2. Этот тип формы имеет свой собственный шаблон, и это работает нормально.Тип пользовательской формы Symfony с активами

Тип формы также нуждается в некотором javascript на клиентском столе, чтобы работать красиво. Я хотел бы добавить этот javascript на страницу, используя тот же шаблон, который я использую для визуализации виджета. Это немного больше хлопот, чтобы сделать это вручную. Я мог бы добавить javascript вручную на каждой странице, но было бы неплохо, если бы это произошло автоматически.

Я не могу добавить javascript непосредственно перед или после самого элемента, так как он имеет зависимость от jquery, который загружается только в нижней части тела.

Я попытался использовать блок, который определен в «основном шаблоне» (он называется block_javascript), чтобы добавить пользовательские javascripts в нижний колонтитул страницы, но кажется, что рендеринг форм работает немного по-другому, а блок недоступно.

Я использую assetic для подготовки и возврата активов.

Есть ли способ, которым я могу использовать блоки из основного шаблона, отображаемого при визуализации виджета формы?

+0

Я действительно так не думаю, но посмотрите на этот комплект https://github.com/genemu/GenemuFormBundle, он дает вам дополнительную функцию 'form_javascripts', которую вы можете использовать для отображения js для вашего формы. – user2268997

+0

Функция интересна, но я думаю, что она не будет работать в сочетании с assetic, которую я использую (но не упоминал об этом, вопрос обновляется сейчас). Я получаю чувство, что это хорошо работает, для этого потребуется много дополнительного кода. Добавление js + css вручную на странице выглядит намного проще и оставляет больше места для исключений, где вам нужно что-то немного другое. – DoppyNL

ответ

0

Я не думаю о всех последствиях или, если это выполнимо, но вот идея, которая может решить вашу проблему: используйте диспетчер событий.

  • событие для добавления активов
  • сервис, который проведет перечень активов для использования и подписаться на выше событие
  • расширения Twig, которые используют выше службу, чтобы средства, доступные в шаблоне
  • спускового событие в buildView() функции вашего типа формы с правильными параметрами
  • использовать расширение Twig в шаблоне макета

Это теоретически должно работать.

+0

Это действительно может работать не только в теории, но и в реальности. Хотя мне не очень нравится хранить такую ​​информацию в сервисе, я мог бы сузить область обслуживания, но он все еще запутан. Он также не работает хорошо с assetic (или я чего-то не хватает). Я забыл упомянуть о приеме в оригинальном вопросе, теперь он обновляется. – DoppyNL

+0

Я должен работать с Assetic, если служба зарегистрирует имя AssetReference (например, «dynamic_assets») в AssetCollection. Тогда вы должны обратиться к этому в своем шаблоне с '' @ dynamic_assets'' –

+0

Поиграв с ним какое-то время, я решил не использовать это решение, но использовать ручной подход. Если форма нуждается в javascript, вам необходимо убедиться, что она включена в страницу вручную либо с помощью JavaScript на сайте, либо на одной странице javascript. Это из-за гибкости и предотвращения проблем с автоматически добавленными javascripts. Всегда есть одно исключение. Если, однако, вы действительно хотите добавить javascript автоматически, это похоже на путь. Даже при том, что вы по-прежнему оставляете данные в своем сервисе. – DoppyNL

Смежные вопросы