gpt4 book ai didi

twig - symfony 4 中的表单构建器和主题变量

转载 作者:行者123 更新时间:2023-12-04 23:10:27 25 4
gpt4 key购买 nike

有些情况下我的表单输入会有图标,有些没有。最初,我认为我可以将类放入表单构建器中,如下所示:

$builder
->add('email', EmailType::class, [
'label' => 'Email address',
'attr' => [
'placeholder' => 'john.smith@foo.com',
'class' => 'has_icon icon_email'
],
'constraints' => [
new NotBlank([
'message' => 'Enter an email address.'
])
]
])

然后表单模板中的输出可能会采用类并重新配置外观。显然这是行不通的,但这是我前进的方向:
{% block form_row %}
<div class="form_row">
{{ form_label(form) }}
{% if form.vars.attr.class == 'has_icon' %}
test
{% endif %}
{{ form_errors(form) }}
</div>
{% endblock form_row %}

这是正确的方法还是有另一种更可靠的方法来解决这个问题?

编辑 2019/9/22

我想做一个测试,这很有趣,因为如果我要尝试访问表单的块前缀,我可以通过在表单主题中指定如下:
block_prefixes.2 == "password"这将访问块前缀内的数组并检查它。但是,如果我要访问 attr 则类选项如下:
attr.class它将返回错误 Key "class" does not exist as the array is empty.这是为什么?如何轻松访问 attr 中的数组?

最佳答案

我认为您想为每个输入制作自定义 FormType,然后为主题中的每个输入使用自定义 fom_widget,就像在内置 Symfony\Component\Form\Extension\Core\Type\PercentType 中所做的一样。和 bootstrap_4_layout.html.twig
表格类型:

// src:"/vendor/symfony/form/Extension/Core/Type/PercentType.php"

namespace Symfony\Component\Form\Extension\Core\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\DataTransformer\PercentToLocalizedStringTransformer;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormView;
use Symfony\Component\OptionsResolver\OptionsResolver;

class PercentType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->addViewTransformer(new PercentToLocalizedStringTransformer($options['scale'], $options['type']));
}

/**
* {@inheritdoc}
*/
public function buildView(FormView $view, FormInterface $form, array $options)
{
$view->vars['symbol'] = $options['symbol'];
}

/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'scale' => 0,
'symbol' => '%',
'type' => 'fractional',
'compound' => false,
]);

$resolver->setAllowedValues('type', [
'fractional',
'integer',
]);

$resolver->setAllowedTypes('scale', 'int');
$resolver->setAllowedTypes('symbol', ['bool', 'string']);
}

/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'percent';
}
}

form_theme:
// src:"/vendor/symfony/twig-bridge/Resources/views/Form/bootstrap_4_layout.html.twig"
...

{% block percent_widget -%}
{%- if symbol -%}
<div class="input-group">
{{- block('form_widget_simple') -}}
<div class="input-group-append">
<span class="input-group-text">{{ symbol|default('%') }}</span>
</div>
</div>
{%- else -%}
{{- block('form_widget_simple') -}}
{%- endif -%}
{%- endblock percent_widget %}

...

关于twig - symfony 4 中的表单构建器和主题变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57842979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com