Il modulo Gii e le applicazioni CRUD

Gii è un modulo (MAGICO, come viene definito dai creatori di Yii2) che viene provvisto da Yii2 per generare tutto lo scheletro del codice necessario alla gestione di una tabella di un database e delle sue relazioni.

1. Creiamo una tabella.

Innanzitutto quindi creiamo una tabella nel nostro database.

Creeremo la tabella ‘posts’, la quale è legata alla tabella ‘users’ attraverso una relazione con la chiave ‘users_id’, come si vede nello schema E-R:

SchemaRelazionale1

Creiamo quindi prima la tabella:

CreateTablePosts

Ora creiamo le relazioni tra le tabelle, come detto sopra. Per fare questo, premo il pulsante ‘Relazione vista’ in alto e inserisco i dati come qui sotto, infine premo il pulsante ‘Salva’ in basso a destra:

CreatePostsRelations

 

2. Creiamo un modello per la tabella usando Gii.

Colleghiamoci all’indirizzo ‘http://localhost/basic/web/index.php?r=gii’. Vedremo la schermata del modulo Gii:

GiiIndex

 

Dobbiamo innanzitutto creare un modello, attraverso il ‘Model Generator’. Avviamolo premendo ‘Start’ e ci troveremo in una pagina nella quale dobbiamo inserire i seguenti dati:

ModelGenerator

In particolare dovremo inserire:

  • Table name: il nome della tabella del database per la quale vogliamo creare il modello (posts);
  • Model class: il nome della classe che verrà creata. Di default prende lo stesso nome della tabella, ma con l’iniziale maiuscola;
  • Generate Relations: se vogliamo generare anche delle funzioni per gestire le relazioni (e noi lo vogliamo!!) scegliamo ‘All relations with inverse’.

Premiamo il bottone ‘Preview’ e poi il bottone ‘Generate’ che appare subito dopo.

Abbiamo così generato la classe ‘Posts’ che conterrà il seguente codice:

<?php

namespace app\models;

use Yii;

/**
 * This is the model class for table "posts".
 *
 * @property integer $post_id
 * @property string $post_title
 * @property string $post_description
 * @property integer $author_id
 *
 * @property Users $author
 */
class Posts extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'posts';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['post_title', 'post_description', 'author_id'], 'required'],
            [['post_description'], 'string'],
            [['author_id'], 'integer'],
            [['post_title'], 'string', 'max' => 100],
            [['author_id'], 'exist', 'skipOnError' => true, 'targetClass' => Users::className(), 'targetAttribute' => ['author_id' => 'user_id']],
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'post_id' => 'Post ID',
            'post_title' => 'Post Title',
            'post_description' => 'Post Description',
            'author_id' => 'Author ID',
        ];
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getAuthor()
    {
        return $this->hasOne(Users::className(), ['user_id' => 'author_id'])->inverseOf('posts');
    }
}

Commenti

commenti