Accade spesso di dover validare campi habtm (relazione hasAndBelongsToMany). Vediamo un esempio di validazione in CakePHP.

La base che utilizzeremo sarà quella di un’applicazione gestionale di esempio.

Il nostro gestionale permette di accettare degli ordini. Questi ordini sono legati a delle regioni. Ogni ordine DEVE avere almeno una regione selezionata

Se hai bisogno di una ripassata su dove mettere i file leggi l’articolo struttura CakePHP.

I Modelli che utilizzeremo sono due (2): Order e Region.

La relazione HABTM (has and belongs to many o relazione molti a molti in CakePHP) ha la necessità di una terza tabella per salvare i dati.

Queste sono le tabelle che utilizzeremo: orders, orders_regions e regions.

Segue la struttura delle tabelle

Per l’utilizzo dei campi created e modified vi rimando all’articolo Created e Modified – Tracciare Creazione e Modifica

Validare Campi Habtm

Create le tabelle possiamo passare al passo successivo: i Modelli.

Anche se i modelli creati sono due non c’è necessità, seguendo le convenzioni sulla nomenclatura delle tabelle di CakePHP, di eseguire ulteriori azioni per la tabella HABTM.

Possiamo ora creare il controller OrdersController.

Alla riga 8 del controller OrdersController possiamo trovare una delle chiavi di questo esempio: saveAll().

Utilizzando saveAll ( book ufficiale ) con l’opzione ‘deep’ => true nel secondo argomento andiamo a salvare i dati dei modelli associati al nostro modello Order.

L’ultima carta da mettere sul tavolo è il Form. La creazione del campo associato è fondamentale.

Vediamo nel dettaglio la view:

Alla riga 6 troviamo l’ultimo pezzo necessario al funzionamento di questa validazione.

In questo esempio andiamo a creare delle checkbox multiple, inoltre associamo il dato come Order.Region. Questo genera dei dati in post che conterranno, nella chiave Order, la chiave Region composta da un array numerico con valore id della Region da associare.

Grazie all’opzione ‘deep’, utilizzata nel saveAll(), i dati verranno correttamente salvati nella tabella hasAndBelongsToMany.

Se non selezioniamo nessun checkbox la regola di validazione che abbiamo impostato nel modello Order alla chiave ‘Region’ (quindi lo stesso nome utilizzato nell’input del form) entrerà in azione rendendo non valido il nostro Form.

Anche se gli esempi pratici sono ridotti all’osso, possiamo notare che l’investimento nelle regole di validazione ha un costo basso per lo sviluppatore in CakePHP.

Per ora è tutto!

Seguimi

Walter Raponi

Appassionato di torte!

Ingredienti base: Model, View, Controller! Un grande framework come CakePHP e la nostra torta è pronta!
Seguimi

Latest posts by Walter Raponi (see all)