2016-03-06 105 views
0

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添加到我现在正在构建的用户表单中,因为这不会让我的代码非常干燥,因为会有(我们会这样认为的)地方,我需要重新使用该块渲染其他领域?

所有帮助最受欢迎。

谢谢。

回答

2

你可以定义选项应用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 -%} 
+0

是啊,这就是我都试过了。我有一个文件,我的配置文件指向并加载覆盖,例如第一个表单块。然而,无论我做什么,我都无法获得单个输入字段来呈现不同的块,它只会呈现第一个块。因此,我没有得到我的clearfix类添加到包装div –

+0

这不是我想要做的,我希望能够添加一个类块在选定的输入,而不是所有的复选框,如在你的例子 –

+0

对不起,我更新我的回答。现在,我了解它是正确的? –