Как да добавите css клас в бутон за изтриване на шаблона на Symfony2 twig?

Нов съм в Symfony. Моята версия на Symfony е 2.5.7. Генерирах CRUD с помощта на "generate:doctrine:crud".

В изгледа на всеки запис има бутон за изтриване. Искам да добавя css клас в бутон.

За този бутон генерираният код е -

{{ form(delete_form) }} 

Чрез проверка от браузъра получих -

<button type="submit" id="form_submit" name="form[submit]">Delete</button>

Промених генерирания twig код на -

{{ form_widget(delete_form, {'attr': {'class': 'btn btn-danger btn-lg'}}) }}

Чрез проверка от браузъра получих -

<div id="form" class="btn btn-danger btn-lg">
    <div>
        <button type="submit" id="form_submit" name="form[submit]">Delete</button>
    </div>
    <input type="hidden" id="form__token" name="form[_token]" value="JrBKKEdf1F8hBDYIzu0TP9a4fauKvmlPMGg3rHwwA3w">
 </div>

И така, бутонът изглежда така, сега -

въведете описание на изображението тук

Но аз го искам като...

въведете описание на изображението тук

И така, моят генериран код трябва да изглежда така -

<div>
    <button type="submit" id="form_submit" name="form[submit]" class="btn btn-danger btn-lg">Delete</button>
</div>

Опитах като, но не работи - показва само нормален бутон за изтриване, тъй като не е включен клас -

{{ form_widget(delete_form.submit, { 'label': 'Delete' }, { 'attr': {'class': 'btn btn-danger btn-lg', 'type': 'button'} }) }}

Между другото, без следния бутон за изтриване на twig код не изтрива записа --

{{ form(delete_form) }}

Как да го направя от клонка???


person Shahjalal    schedule 27.11.2014    source източник
comment
опитайте се да премахнете този ред { 'label': 'Delete' }, форма form_widhet   -  person Azam Alvi    schedule 27.11.2014
comment
Опитах, видът на бутона се промени, но сега бутонът за изтриване не изтрива записа... :(   -  person Shahjalal    schedule 27.11.2014


Отговори (4)


Реших проблема.. :) но не от twig.. от контролера.. Добавих css класа към метода createDeleteForm()...

private function createDeleteForm($id)
    {
        return $this->createFormBuilder()
            ->setAction($this->generateUrl('book_delete', array('id' => $id)))
            ->setMethod('DELETE')
            ->add('submit', 'submit', array('label' => 'Delete', 
                                            'attr' => array('class' => 'btn btn-danger btn-lg')))
            ->getForm()
        ;
    }

Но мисля, че това не е добра практика.. :(

person Shahjalal    schedule 27.11.2014
comment
За информация, винаги добавям класове и други атрибути в контролера, а не в twig. - person Veve; 27.11.2014
comment
По-добрата му практика е всички неща, свързани с предния край, да се държат в тайна. - person Lord Zed; 19.06.2015

Премахнете { 'label': 'Delete' } и трябва да работи. Ето един пример:

{{ form_widget(delete_form.submit, { 'attr': {'class': 'btn btn-danger btn-lg', 'type': 'button'} }) }}
person Lord Zed    schedule 27.11.2014
comment
За мен това е най-добрият отговор. .submit направи разликата. - person Marcos; 19.06.2015
comment
Това проработи при мен, използвах {{ form_widget(delete_form.submit, { 'attr': {'class': 'btn btn-danger'} }) }} - person Davey Hoogland; 12.05.2016

Разширяване на отговора на Zed, но имах нужда и от етикета на друг език, без да докосвам нищо друго освен шаблона TWIG:

   {{ form_widget(delete_form.submit, {'label': 'Usuń', 'attr': {'class': 'btn btn-danger btn-lg', 'type': 'button', 'title': 'DELETE'} }) }}    

По-късно на същата страница промених бутона Актуализиране по подразбиране:

{{ form_widget(edit_form.submit, {'label': 'Zapisz', 'attr': {'class': 'btn btn-save  btn-lg', 'type': 'button', 'title': 'UPDATE'} }) }} 
person Marcos    schedule 19.06.2015

Всички отговори тук работят за добавяне на класа към бутона за изпращане. Въпреки това, ако някой просто използва този ред с delete_form.submit, формулярът няма да работи. Пълният отговор е:

{{ form_start(delete_form) }}
{{ form_widget(delete_form.submit, { 'attr': {'class': 'btn btn-danger', 'type': 'button'} }) }}
{{ form_end(delete_form) }}

Както е обяснено в документа, form_widget не изобразява началните и крайните тагове на формуляра:

{# renders all fields #}
{{ form_widget(form) }}

{# renders all fields *and* the form start and end tags #}
{{ form(form) }}
person ana-lu    schedule 06.10.2015