Virtual field per il displayField in CakePHP 3

In questo tutorial vedremo una soluzione, per applicazioni sviluppate con CakePHP framework, al fine di creare un “virtual field” (campo virtuale formato per esempio da cognome + nome) da utilizzare come parametro del “displayField” del Table Model in CakePHP 3. Questa soluzione consente di avere in automatico un virtual fied da più attributi della stessa tabella, ripronendo i dati nella select HTML, generata mediante l’input Helper di CakePHP 3.

Procediamo con ordine e vediamo i tre semplici passaggi richiesti. E’ possibile trovare ulteriori informazioni nella sezione ORM della guida ufficiale del framework CakePHP 3.

Definiamo il virtual field nell’Entity Model

Ipotizzando di lavorare con la tabella UTENTE, andiamo a definire il nuovo campo virtuale, attraverso la funzione _getNomeCampo(), in src/Model/Entity/Utente.php, come di seguito:

    /**
     * Definisce un campo virtuale da utilizzare in come displayField
     * 
     * @return type
     */
    protected function _getFullname() {
        return $this->_properties['cognome'] . '  ' . $this->_properties['nome'];
    }

A questo punto abbiamo definito il campo Fullname che possiamo utilizzare nel Table model.

Impostiamo il displayField nel Table Model

Infine andiamo ad utilizzare il campo definito nelle impostazioni del Table in src/Model/Entity/UtenteTable.php

class UtenteTable extends Table{

    /**
     * Initialize method
     *
     * @param array $config The configuration for the Table.
     * @return void
     */
    public function initialize(array $config){
        parent::initialize($config);

        $this->table('utente');
        $this->displayField('fullname');
        $this->primaryKey('id');

        /** ALTRO CODICE **/
    }

    /** ALTRO CODICE **/
}

Testiamo il virtual field nel Template

A questo punto utilizzando l’input della Form Helper, verrà generato un menù a tendina composto dagli attributi e separtori utilizzati per impostare il campo FULLNAME nell’Entity Model. Andando nel template, e definiamo la form come di seguito:

<?= $this->Form->create($ritiro) ?>
<?= $this->Form->input('utente_id', ['options' => $utenti]); ?>
...
<?= $this->Form->create($utente) ?>

La Form prevede che sia sta impostato $utenti, passato come options all’input form specifico. Lavorando nel Controller è possibile ricavare i dati ed impostare la variabile $utenti come di seguito:

<?php 
$utenti = $this->Utente->find('list');
$this->set(compact('utenti'));
?>

A questo punto dovremmo essere in grado di replicare l’esempio in base alle evenienze, quello che bisogna fare e replicare i passaggi per ogni campo virtuale che si intende definire.

 

Lascia un commento