2016-03-06 107 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

對不起,我更新我的回答。現在,我瞭解它是正確的? –