Funzioni in unico file
Salve, in un modulo personalizzato ho varie form. Da queste form capita che devo richiamare la stessa function.
Attualmente non sapendo come fare ho copiato lo stesso codice in ogni form. Normalmente creo un file con tutte le function che servono in modo che siano disponibili a tutti.
Se ho capto bene posso usare la dipendenza di iniezione ma non mi funziona.
E' questo il modo giusto o é un'altra la soluzione ?
Gaetano
Risposte
Ciao! L'iniezione di
Ciao! L'iniezione di dipendenza può essere la strada giusta, puoi creare un servizio che espone tutti i metodi, chiamiamoli "condivisi", dei vari form. Qualche info in più https://www.drupal.org/docs/drupal-apis/services-and-dependency-injectio...
Altre strade potrebbero includere:
1) la creazione di un Trait, un bell'esempio semplice ma chiarissimo è qui https://aulab.it/guide/51/i-traits-in-php
2) mettere le funzioni nel file .module del tuo modulo (come accade per gli hook) che viene sempre incluso una volta che il modulo è attivo
Ciao Maurizio, grazie per
Ciao Maurizio, grazie per l'esauriente risposta (come al solito)
Ho letto l'articolo sul trait (sembra semplice da applicare) ma preferisco approfondire la questione 'DI' che potrebbe servirmi anche in seguito.
Se ho capito bene se inserisco le function nel modulo automaticamene la posso richiamare da qualsiasi form?
Rispetto all'articolo che mi hai postato, oltre ad altri articoli, ho tenuto come base questo
https://www.drupal.org/docs/drupal-apis/services-and-dependency-injectio...
se non ti dispiace ti posto il codice
Il modulo personalizzato è udf ed in questa cartella ho creato il file, udf.services.yml (con la s finale. Ho perso un sacco di tempo a capire che ci voleva. In alcuni esempi lo metteva senza la 's')
Ho creato al sottocartella udf\Services ed in questa ho creato il file, FunzioniCentralizzate.php di seguito il contenuto
In ultimo nel submitForm della form ho inserito il codice successivo ma mi ritorna un errore
Errore che restituisce
E non capisco il perché
Ad una prima lettura del tuo
Ad una prima lettura del tuo post, l'errore potrebbe stare nella posizione del file della classe.
Nota che tutti i plugin, servizi, controller etc.. devono trovarsi all'interno della cartella src.
Quindi se il tuo modulo ad esempio si trova in
web/modules/custom/udf
la classe FunzioniCentralizzate deve trovarsi (in base al namespace Drupal\udf\Services) in:
web/modules/custom/udf/src/Services/FunzioniCentralizzate.php
Devi anche assicurarti che il file yml contenga il servizio chiamato con il path corretto:
class: Drupal\udf\services\FunzioniCentralizzate
dovrebbe essere
class: Drupal\udf\Services\FunzioniCentralizzate
controlla queste cose e vedi se risolvi il problema di classe non trovata.
Grazie, provo
Grazie, provo