Intereting Posts
Переменные PHP – имя переменной объединения Объяснение строки JSON в массиве PHP Отправлять данные POST при нажатии ссылки без использования форм? Поиск URL-адресов из текстовой строки через php и regex? PHP: простой HTML DOM Parser – несколько атрибутов в find ()? MySQL Выберите из категории в таблице y, где Count (продукта категории из другой таблицы) больше нуля Соединение фильтра_состояния в wordpress preg_match, чтобы найти слово, которое заканчивается определенным символом Вход в систему Системный дизайн, позволяющий каждому пользователю регистрироваться на одной машине за раз PDO подготовил заявления для INSERT и ON DUPLICATE KEY UPDATE с именованными заполнителями Любой способ определить выбранный внутри тега <select>, а не на <option> Ошибка wkhtmltopdf в журнале apache Регулярное выражение PHP для извлечения php-функций из файлов кода PHP file_get_contents () не работает PHP Сравнение ключей и изменение определенных значений из многомерного массива с соответствующими значениями ключей из простого массива

HTML в символах формы Symfony2 вместо обычного текста

Я пытаюсь реализовать что-то вроде этого:

<div> <input type="checkbox" name="checkbox" id="checkbox_id" /> <label for="checkbox_id">I agree to the <a href="/tos">Terms of Service</a></label> </div> 

Самое близкое, что я придумал, это:

 <div> {{ form_widget(form.agreeWithTos) }} <label for="{{ form.agreeWithTos.vars.id }}">I agree to the <a href="#">Terms of Service</a></label> </div> 

Есть ли способ лучше? Необходимо указать {{form.agreeWithTos.vars.id}} неэлегантно. 🙂

Solutions Collecting From Web of "HTML в символах формы Symfony2 вместо обычного текста"

Решила эту проблему, используя следующий код в моей форме-теме:

 {# ---- form-theme.html.twig #} {% block checkbox_row %} {% spaceless %} <div> {{ form_errors(form) }} <label class="checkbox" for="{{ form.vars.id }}"> {{ form_widget(form) }} {{ label|default(form_label(form)) | raw }} </label> </div> {% endspaceless %} {% endblock %} 

в вашем шаблоне формы вы можете использовать:

 {% form_theme form '::form-theme.html.twig' %} {{form_row(form.termsOfServiceAccepted, { 'label' : 'I have read and agree to the <a href="#">Terms and conditions</a>' }) }} 

таким образом, блок из формы-темы применим к любому флажку на странице. Если вам нужно также использовать тему по умолчанию, вы можете добавить параметр для включения специального рендеринга:

 {# ---- form-theme.html.twig #} {% block checkbox_row %} {% spaceless %} {% if not useTosStyle %} {{ parent() }} {% else %} {# ... special rendering ... #} {% endif %} {% endspaceless %} {% endblock %} 

который будет использоваться следующим образом:

 {% form_theme form '::form-theme.html.twig' %} {{form_row(form.termsOfServiceAccepted, { 'useTosStyle' : true, 'label' : 'I have read and agree to the <a href="#">Terms and conditions</a>' }) }} 

Я думаю, вы ищете форму . Таким образом, вы можете в {{ form_widget(form) }} каждую часть формы в независимом файле, а затем просто визуализировать ее «элегантным» способом, по очереди с {{ form_row(form) }} или просто с {{ form_widget(form) }} . Это действительно зависит от вас, как вы его настроили.

Таким образом, оформление формы довольно сложно. Самое легкое, что я нашел, это просто подавить метку поля ( 'label'=> false в классе формы Symfony), а затем просто добавить ярлык html в твист html.

Я бил головой об этом, а потом был момент эврики. Самый простой способ сделать это – BY FAR – создать расширение Twig.

Вот мой код Twig:

 {# twig example #} {% block form_label %} {% set label = parent() %} {{ label|unescape|raw }} {% endblock %} 

и PHP:

 <?php new Twig_SimpleFilter('unescape', function($value) { return html_entity_decode($value); }); 

Пара отмечает:

  • Это освобождает весь ранее сбежавший код. После этого вам обязательно нужно снова сбежать.
  • Для этого требуется тег extends для вашей целевой формы темы в вашей собственной теме пользовательской формы, которую вы можете использовать в своих последующих формах. Поместите код ветви в тему пользовательской формы и замените ссылки на вашу другую тему темы / темы с этим.

В целом это наименьшие строки кода для самого большого и лучшего результата, который я смог найти. Он также ультра-портативный и DRY: вы можете продлить любую тему формы, и ярлык изменится без изменения остальной части вашего кода.

Вы могли бы использовать форму в другом виде: вы можете переместить <label> вне функции form_label() .

Создайте специальную тему формы, и для form_label переместите <label> вне функции form_label :

 {% block checkbox_row %} <label>{{ form_label(form) }}</label> {{ form_errors(form) }} {{ form_widget(form) }} {% endblock checkbox_row %} {% block checkbox_label %} {{ label }} {% endblock checkbox_label %} 

Теперь, в вашем тесте, переопределите label вашего флажка и, таким образом, эффективно добавьте HTML в функцию метки:

 {% form_theme form 'yourtheme.html.twig' _self %} {% block _your_TOS_checkbox_label %} I agree with <a href="#" target="_blank">terms and conditions</a> {% endblock _your_TOS_checkbox_label %}