Symfony 2,自定义窗体小部件对于单个输入?
问题描述:
UPDATE/EDITSymfony 2,自定义窗体小部件对于单个输入?
这是我所做的,但由于某种原因,它不工作。所以服务如下,
clearfix.extended_type:
class: Bundle\Form\ClearfixExtension
tags:
- { name: form.type_extension, extended_type: Symfony\Component\Form\Extension\Core\Type\FormType }
现在我确定这是错误的,我没有使用过多的服务,仍然试图让我的头靠近他们。
我也建立了这个类,请参阅下面的答案,以便其他读者阅读此文,并使用正确的命名空间。
我也做了以下的块,
{%- block form_row -%}
<div class="other classes here {% if clearfix %}clearfix"{% else %}"{% endif %}>
{{- form_widget(form) -}}
{{- form_label(form) -}}
{{- form_errors(form) -}}
</div>
{%- endblock form_row -%}
但是,所有我从我的形式获得,当我尝试呈现它,“变‘clearfix’不存在..... “
那么我做错了什么?我猜它与服务设置有关?
感谢
OK,这是在做一点点我的头,还我已经遍地的文档,但我要么做完全错误或它的我想要做的是不能干吗?
所以我使用Symfony 2.7,并将它设置为指向一个窗体树枝文件,以便我可以重写一些默认值。这工作正常,没有任何问题。不过,我现在想要能够使用添加的clearfix类渲染某些行。这就是我撕心裂肺现在,
{%- block form_row -%}
<div>
{{- form_widget(form) -}}
{{- form_label(form) -}}
{{- form_errors(form) -}}
</div>
{%- endblock form_row -%}
呈现我用正确的类都行,但我希望能够使用下面的一些选定的行
{%- block _clerfix -%}
<div class="clearfix">
{{- form_widget(form) -}}
{{- form_label(form) -}}
{{- form_errors(form) -}}
</div>
{%- endblock _clerfix -%}
然后我与我想建立与添加clearfix类形式的抽象类型中的block_name
调用该方法,像这样,
->add('password', 'password', ['label' => 'Password',
'required' => false,
'block_name' => 'clearfix',
'attr' => ['autocomplete' => 'off','class' => 'Passwordd', 'aria-required' => 'true' ]
])
是我想是可行的?我真的不想将这个clearfix添加到我现在正在构建的用户表单中,因为这不会让我的代码非常干燥,因为会有(我们会这样认为的)地方,我需要重新使用该块渲染其他领域?
所有帮助最受欢迎。
谢谢。
答
你可以定义选项应用clearfix
Symfony的2.8
class ClearfixExtension extends AbstractTypeExtension
{
public function buildView(FormView $view, FormInterface $form, array $options)
{
$view->vars['clearfix'] = $options['clearfix'];
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefault('clearfix', false);
}
public function getExtendedType()
{
return FormType::class;
}
}
services.yml
clearfix_extension:
class: Bundle\Form\ClearfixExtension
tags:
- { name: form.type_extension, extended_type: Symfony\Component\Form\Extension\Core\Type\FormType }
Symfony的2创建形式扩展。7
class ClearfixExtension extends AbstractTypeExtension
{
public function buildView(FormView $view, FormInterface $form, array $options)
{
$view->vars['clearfix'] = $options['clearfix'];
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefault('clearfix', false);
}
public function getExtendedType()
{
return 'form';
}
}
services.yml
clearfix_extension:
class: Bundle\Form\ClearfixExtension
tags:
- { name: form.type_extension, alias: form }
并为您在树枝这个选项
{%- block form_row -%}
<div {% if clearfix %}class="clearfix"{% endif %}>
{{- form_widget(form) -}}
{{- form_label(form) -}}
{{- form_errors(form) -}}
</div>
{%- endblock form_row -%}
是啊,这就是我都试过了。我有一个文件,我的配置文件指向并加载覆盖,例如第一个表单块。然而,无论我做什么,我都无法获得单个输入字段来呈现不同的块,它只会呈现第一个块。因此,我没有得到我的clearfix类添加到包装div –
这不是我想要做的,我希望能够添加一个类块在选定的输入,而不是所有的复选框,如在你的例子 –
对不起,我更新我的回答。现在,我了解它是正确的? –