SymfonySe utilizzate Symfony, vi avvalerete spesso dei vari helper messi a disposizione dal framework, tra cui button_to() (documentazione) di UrlHelper. Avrete però notato che questo helper non genera un vero e proprio button, ma un più semplice input mascherato da button tramite l’attributo type.

Infatti il seguente codice:

<?php echo button_to('Invia', 'module/action') ?>

stamperà:

<input value="Invia" type="button" onclick="document.location.href='/module/action';" />

e non invece, come magari si vorrebbe:

<button onclick="document.location.href='/module/action';">Invia</button>

Le differenze tra l’uno e l’altro sono davvero tante e, volendo, potete fare riferimento a questo interessante articolo di Digital web magazine. Mi limito a farne presente una su tutte: con input, l’etichetta potrà essere solo una stringa testuale, essendo gestita da un attributo (value), mentre con button si ha ampia libertà: è ad esempio possibile inserire un’immagine, come al sottoscritto capita di frequente fare.

Se si preferisce utilizzare button, si può ottenere l’ultimo risultato semplicemente personalizzando il relativo helper (UrlHelper). Però, poiché l’helper riscritto dall’utente sostituisce interamente quello originale di Symfony, è necessario lavorare su una copia dello stesso, altrimenti tutte le altre funzioni helper non saranno disponibili. Quindi è necessario copiare l’originale /lib/helper/UrlHelper.php di Symfony nella stessa cartella presente nel nostro progetto (lib è già esistente, helper va creata all’occorrenza) e quindi procedere con la modifica di quest’ultimo.

Innanzitutto tutto, cancellate la riga 375 (l’etichetta non deve essere passata all’attributo value):

$html_options['value'] = $name;

Quindi, cancellate la riga 402 (non ci servirà mai un button di tipo button, la definizione è già implicita):

$html_options['type'] = 'button';

Poi cercate la riga 415:

 return tag('input', $html_options);

E modificatela come segue (verrà così restituito un vero button):

return content_tag('button', $name, $html_options);

La stessa procedura (cambiano solo le righe di riferimento, fate comunque attenzione) può essere seguita per l’helper button_to_function() (documentazione) di JavascriptBaseHelper, utilizzabile per associare a un bottone una funzione Javascript.

XHTML - Puoi usare questi tag: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>