Передача пользовательских данных в тему формы в Symfony / Twig - PullRequest
1 голос
/ 11 апреля 2020

Я новичок в Symfony, в настоящее время работаю с 4.4 и пытаюсь реализовать простую тему формы для одной указанной формы c, т.е. тема находится в том же файле, что и файл html.twig формы. У меня есть свой собственный блок form_row, и я пытаюсь передать пользовательские данные (значок для использования в div) при его вызове, что-то вроде (это очень обобщенно!):

{{ form_row(signUpForm.email, {
    attr: { placeholder: 'e.g. bobsmith@gmail.com' },
    icon: 'envelope'
}) }}

затем попробуйте выполнить рендеринг в форме как

{%- block form_row -%}
<div>
    {{ form_label(form) }}
    {{ form_widget(form, {attr: class: 'input'}) }}
    <i class="icon {{ icon }}"></i>
</div>

Я также попытался передать значок через formBuilder, как

$builder
    ->add('email', EmailType::class, [
    'attr'=> ['icon' => 'envelope']
])

, но без радости. Конечно, это должно быть возможно! Любая помощь будет высоко ценится. Спасибо

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

Итак, мне удалось найти «правильный» способ сделать то, что я хочу: расширение типа формы. Урок Symfony Cast довольно хорош. Короче говоря, вы создаете класс для расширения основного входного класса формы; в моем случае я имел дело с текстовым вводом, поэтому я создал класс App\Form\ypeExtension\TextIconExtension, расширенный с FormTypeExtensionInterface, затем реализовал configureOptions и buildView (я удалил функции в интерфейсе, который я не заполнил ):

class TextIconExtension implements FormTypeExtensionInterface
{

public function buildView(FormView $view, FormInterface $form, array $options)
{
    $view->vars['icon'] = $options['icon'];
}

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults([
        'icon' => 'user'
    ]);
}

public function getExtendedType()
{
    return TextType::class;
}

public function getExtendedTypes(): iterable
{
    return [TextType::class];
}

}

Затем в своем шаблоне формы я могу просто передать значение для значка:

{{ form_row(signUpForm.email, {
    attr: { placeholder: 'e.g. bobsmith@gmail.com' },
    icon: 'envelope'
}) }}
0 голосов
/ 12 апреля 2020

Я не уверен, но вы можете получить доступ к переменной формы с помощью {{form}} в вашей теме. Таким образом, вы можете использовать его. Надеюсь, что эта помощь

Изменить:

Вы можете добавить свойство в вашей сущности и использовать его в шаблоне, как это:

{%- block form_row -%}
<div>
    {{ form_label(form) }}
    {{ form_widget(form, {attr: class: 'input'}) }}
    {% set myData = form.vars.value %}
    <i class="icon {% if myData.type == 'mail' %}envelope{% endif %}"></i>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...