Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Laravel 5

Eloquent Mutators e Accessors in Laravel

by
Difficulty:BeginnerLength:ShortLanguages:

Italian (Italiano) translation by Francesco (you can also view the original English article)

In questo articolo, capiremo i mutators e gli accessors dell'ORM Eloquent del framework web Laravel. Dopo l'introduzione, vedremo degli esempi per capire questi concetti.

In Laravel, i mutators e gli accessors permettono di modificare i dati prima che vengano salvati e recuperati da un database. Per essere precisi, il mutatore consente di modificare i dati prima che vengano salvati in un database. D'altra parte, la funzione di accesso consente di modificare i dati dopo che sono stati recuperati da un database.

Infatti, il modello Laravel è il luogo centrale dove è possibile creare metodi mutator e accessor. E naturalmente, è bello avere tutte le modifiche in un unico luogo, piuttosto che sparsi in posti diversi.

Creare Accessors e Mutators in una Model Class

Ora che hai familiarità con il concetto di base delle funzioni di accessor e mutator, andremo avanti e sviluppare un esempio reale per dimostrarlo.

Presumo che conosciate già il modello Eloquent in Laravel, e useremo il modello Post come punto di partenza del nostro esempio. Se non ancora creato il modello Post, usiamo il comando artisan per crearlo.

Questo dovrebbe creare un file di modello in app/Post.php come illustrato di seguito.

Sostituiamo il contenuto di tale file con il seguente.

Poichè abbiamo usato l'opzione --migration, dovrebbe inoltre creare una migrazione di database. Nel caso in cui non lo sappiate, è possibile eseguire il seguente comando in modo da creare una tabella nel database.

Al fine di eseguire gli esempi in questo articolo, è necessario creare le colonne name e published_at nella tabella post. In ogni caso, non andremo nei dettagli dell'argomento della migrazione, che è fuori dall'ambito di questo articolo. Torniamo ai metodi che ci interessano.

In primo luogo, vediamo il metodo mutator.

Come abbiamo detto in precedenza, i mutatori vengono utilizzati per modificare i dati prima che vengano salvati in un database. Come potete vedere, la sintassi del metodo mutatore è set{nome attributo}Attribute. Naturalmente, è necessario sostituire {nome attributo} con un nome di attributo effettivo.

Il metodo setNameAttribute viene chiamato prima che il valore dell'attributo name venga salvato nel database. Per mantenere le cose semplici, abbiamo solo utilizzato la funzione strtolower che converte il titolo del post in minuscolo prima che venga salvato nel database.

In questo modo, è possibile creare metodi di mutator su tutte le colonne della tabella. Ora vediamo il metodo della funzione accessor.

Se i mutatori vengono utilizzati per modificare i dati prima che vengano salvati in un database, il metodo accessor viene utilizzato per modificare i dati dopo che sono stati recuperati da un database. La sintassi del metodo della funzione di accesso è la stessa di quella di mutator tranne che comincia con la parola chiave get anziché la parola chiave set.

Vediamo il metodo getNameAttribute.

Il metodo getNameAttribute verrà chiamato dopo che il valore dell'attributo name viene recuperato dal database. Nel nostro caso, abbiamo utilizzato solo il metodo ucfirst per modificare il titolo del post.

E questo è il modo che si suppone vengano utilizzati gli accessors nei tuoi modelli. Finora, abbiamo appena creato metodi mutator e accessor, e li proveremo nella prossima sezione.

Mutators in azione

Creiamo un controller in app/Http/Controllers/MutatorController.php in modo da testare il metodo mutatore che abbiamo creato nella sezione precedente.

Inoltre, è necessario creare una route associata nel file routes/web.php per accedervi.

Nel metodo index, stiamo creando un nuovo post, utilizzando il modello di Post. Deve impostare il valore della colonna nome al titolo del post allo stesso modo in cui abbiamo usato la funzione strtolower nel metodo mutatore setNameAttribute.

Mutatori di date

Oltre il mutatore che abbiamo visto in precedenza, il modello Eloquent fornisce un paio di speciali setter che consentono di modificare i dati. Ad esempio, il modello Eloquent in Laravel viene fornito con una proprietà speciale $dates che consente di convertire automaticamente le colonne desiderate in un'istanza di date di Carbon.

All'inizio di questo articolo, abbiamo creato il modello per i Post, e il codice riportato di seguito fa parte di quella classe.

Come probabilmente sapete, Laravel crea sempre due campi relativi alla data, created_at e updated_at, con ogni migrazione di database. E converte tali valori in un'istanza di date di Carbon.

Supponiamo che avete un paio di campi in una tabella che si desidera trattare come campi di data. In tal caso, è necessario solo aggiungere i nomi delle colonne nell'array $dates.

Come potete vedere nel codice precedente, abbiamo aggiunto la colonna published_at nell'array $dates, per far sì che il valore di tale colonna verrà convertito in un'istanza di data di Carbon.

Accessors in azione

Per visualizzare le funzioni dell' accessor in azione, andiamo avanti a creare un controller in app/Http/Controllers/AccessorController.php con il seguente contenuto.

Inoltre, creiamo una route associata nel file routes/web.php per accedervi.

Nel metodo index, usiamo il modello Post per caricare un post di esempio in primo luogo.

Successivamente, controlliamo il valore della colonna name, che dovrebbe iniziare con una lettera maiuscola, perchè abbiamo già definito il getNameAttribute di metodo della funzione di accesso per tale colonna.

Inoltre, abbiamo controlliamo il valore della colonna published_at, che dovrebbe essere trattate come una data. Grazie a questo, Laravel converte in un'istanza di Carbon in modo che sia possibile utilizzare tutti i metodi di utilità forniti da tale libreria. Nel nostro caso, usiamo il metodo getTimestamp per convertire la data in un timestamp.

E questo ci porta alla fine di questo articolo!

Conclusione

Oggi, abbiamo esplorato i concetti di mutator e accessor di ORM Eloquent in Laravel. Ciò fornisce un bel modo per modificare i dati prima di salvarli e recuperarli da un database.

Per quelli di voi che hanno da poco iniziato con Laravel o ne stanno approfondendo la conoscenza, con estensioni, abbiamo una varietà di cose che si possono studiare nel market di Envato.

Non esitate a condividere i vostri pensieri utilizzando il feed qui sotto!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.