Connettersi ad un database e usare ActiveRecords

Nell’articolo precedente (Lavorare con le form in Yii2) abbiamo creato una form per raccogliere i dati. Il lavoro fatto serve però a poco se non memorizziamo da qualche parte i dati inseriti attraverso la form.

Vedremo di seguito quindi come utilizzare un database al nostro scopo.

1. Preparare il database MySQL

Innanzitutto utilizziamo il tool phpMyAdmin collegandoci all’indirizzo http://localhost/phpMyAdmin. Qui premiamo il pulsante in alto “Database” per creare un nuovo database. Lo chiameremo “tutorial_yii2” e utilizzeremo la codifica dei caratteri “utf8_general_ci”.

CreateDBMySQL

 

Adesso creiamo all’interno di questo database la tabella “users”, così come nella figura sotto:

CreateTableUsers

Creiamo infine un utente che abbia i privilegi adatti per poter accedere al database creato. Per fare questo premiamo il bottone “Utenti” in alto e a metà della pagina raggiunta premiamo “Aggiungi utente”. Riempiamo poi i campi come segue (utilizzando ad esempio come password ancora la parola ‘tutorial’):

CreateDBUser

Il nostro database è pronto!

 

2. Connettere Yii2 al database creato

Tutti i dati relativi alla connessione al database con Yii2 si trovano nel file “basic/config/db.php”. Esso appare come in figura:

ConfigDBBefore

Per creare la connessione dobbiamo sostituire i valori presenti con i valori corretti. Nel nostro caso dunque i valori da inserire saranno:

ConfigDBAfter

 

3. Creare modello, controllore e vista secondo il modello MVC.

3.1 Creiamo il modello

All’interno della cartella ‘basic/models’ creiamo il file ‘Users.php’. Esso conterrà la classe Users, ovvero il nostro modello dei dati:

<?php

namespace app\models;

use yii\db\ActiveRecord;

class Users extends ActiveRecord{

}

?>

A differenza dell’articolo precedente, si nota che qui la nostra classe modello non estende più la classe Model ma la classe ActiveRecord. Questo perchè la classe ActiveRecord è adatta per dialogare con il database. Per questo esempio lasciamo la nostra classe vuota, ovvero non aggiungiamo nulla di più rispetto ai metodi che vengono già messi a disposizione dalla classe ActiveRecord.

3.2 Creiamo il controllore

All’interno della cartella ‘basic/controllers’ creiamo il file ‘UsersController.php’. Esso conterrà la classe UsersController, ovvero il controllore:

<?php

namespace app\controllers;

use yii\web\Controller;
use app\models\Users;

class UsersController extends Controller{

    public function actionIndex(){
        $users = Users::find()->all();

        return $this->render('index', ['users' => $users]);
    }
}


?>

Abbiamo creato l’azione ‘Index’, che sarà richiamata dall’indirizzo ‘http://localhost/basic/web/index.php?r=users/index’.

L’istruzione

$users = Users::find()->all();

sfrutta il metodo find() della classe ActiveRecord per effettuare una SELECT query sulla tabella ‘users’. Infatti la classe Users (che estende la classe ActiveRecord) rappresenta in tutto e per tutto la tabella ‘users’.

Al metodo find() viene aggiunto in cascata il metodo all(), attraverso il quale viene comunicato che si vuole effettuare una SELECT query che restituisca tutti i valori contenuti nella tabella.

Il risultato viene poi passato alla vista ‘users’ che creeremo nel prossimo paragrafo.

 

3.3 Creiamo la vista

All’interno della cartella ‘basic/views’ creiamo la cartella ‘users’ e, al suo interno, il file ‘index.php’. Esso conterrà la vista che viene renderizzata dal controllore:

 <?php

foreach($users as $user){

    echo $user->username."<br/>";
}

?>

Nella vista si nota che il contenuto della variabile $users (che e’ la variabile restituita dalla query effettuata nel controllore) è un array di oggetti di tipo Users.

Per mezzo del ciclo foreach(…) visualizziamo il contenuto dell’attributo $username.

UN MOMENTO!!! Ma noi non abbiamo mai dichiarato l’attributo $username nel nostro modello dei dati (la classe Users)!!!!

Ed è qui che si vede la grande potenza della classe ActiveRecord: essa infatti crea autonomamente gli attributi con gli stessi nomi dei campi della tabella del database a cui si riferisce!

 

Vedremo nel prossimo articolo come sia possibile automatizzare ancora di più la creazione delle classi relative alle tabelle del database utilizzando il tool Gii.

Commenti

commenti