Configurare il framework Yii2 in Ubuntu

L’installazione di Yii2 si esegue utilizzando “composer“. Per installare Composer si esegua il seguente comando:

curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

In windows si può usare il comodo comando https://getcomposer.org/Composer-Setup.exe

Dopo aver installato composer è preferibile fare l’update:

composer self-update

Il comando per scaricare Yii2 si occupa di creare anche un progetto di base:

composer create-project --prefer-dist yiisoft/yii2-app-basic basic

Se il comando precedente restituisce l’errore che non è installato l’estensione php-dom, si può installare tale estensione con il comando:

sudo apt install php8.0-dom

Allo stesso modo, potrebbe mancare anche l’estensione php-curl, installabile con il seguente comando:

sudo apt install php8.0-curl

Il comando precedente predisporrà un ambiente con il framework Yii all’interno del direttorio basic.

Istruzioni più dettagliate possono essere trovate alla pagina: https://www.yiiframework.com/doc/guide/2.0/en/start-installation

Per verificare se tutto funziona si può usare il comando seguente:

php yii serve

il quale lancia un server WEB minimale che può essere interrogato all’indirizzo http://localhost:8080/

Nella pagina dei contatti raggiungibile dalla home del sito potrebbe presentarsi un problema con una libreria mancante (gd). In tal caso la libreria può essere installata con il seguente comando:

sudo apt install php8.0-gd

e successivamente va abilitata la relativa estensione all’interno del php.ini, scommentando la riga che contiene extension=gd nel file /etc/php/8.0/apache2/php.ini o anche nel file /etc/php/8.0/cli/php.ini.

Se si desidera installare anche il framework jui per i widget in stile jquery ui, si deve lanciare il comando:

composer require --prefer-dist yiisoft/yii2-jui "*"

dall’interno del direttorio basic.

La stessa cosa va fatta per aggiungere le estensioni widgets. Invece di lanciare a mano il comando composer, è sufficiente inserire le seguenti linee all’interno del file basic/composer.json:

    "yiisoft/yii2-bootstrap5": "@dev",
    "yiisoft/yii2-jui": "*",
    "kartik-v/yii2-datecontrol": "@dev",
    "kartik-v/yii2-widgets": "@dev",
    "kartik-v/yii2-widget-datepicker": "dev-master",
    "twbs/bootstrap-icons":"*" 

e lanciare il comando (dal direttorio basic)

composer update

DatePicker utilizza bootstrap 5, che va instanziato con la seguente riga all’interno di basic/config/params.php

'bsVersion' => '5.x'

Va configurato anche il modulo datecontrol, aggiungendo le seguenti righe (dentro web.php) prima di ‘params’ => …

'modules'    => [
    'datecontrol' => [
        'class'          => 'kartik\datecontrol\Module',
        'widgetSettings' => [
            'displaySettings' => [
                kartik\datecontrol\Module::FORMAT_DATE     => 'dd-MM-yyyy',
                kartik\datecontrol\Module::FORMAT_TIME     => 'hh:mm:ss a',
                kartik\datecontrol\Module::FORMAT_DATETIME => 'dd-MM-yyyy hh:mm:ss a',
            ],
            // format settings for saving each date attribute (PHP format example)
            'saveSettings'    => [
                kartik\datecontrol\Module::FORMAT_DATE     => 'php:U', // saves as unix timestamp
                kartik\datecontrol\Module::FORMAT_TIME     => 'php:H:i:s',
                kartik\datecontrol\Module::FORMAT_DATETIME => 'php:Y-m-d H:i:s',
            ],
        ]
    ], 
],    

le quali indicano al sistema quale deve essere la formattazione per i campi Date e DateTime sia in maschera che durante il salvataggio.

Per sicurezza, ho aggiunto, sempre all’interno di web.php, nell’area components le seguenti righe:

    'formatter' => [
       'dateFormat' => 'dd-MM-Y',
       'datetimeFormat' => 'dd-MM-Y H:i:s',
       'timeFormat' => 'H:i:s',

       'locale' => 'it-IT', //your language locale
       'defaultTimeZone' => 'Europe/Rome', // time zone
    ],  

yii2::DatePicker utilizza bootstrap5 e di conseguenza font-awesome5.

Pertanto, per farlo funzionare è necessario inserire nel layout di base delle views (views/layouts/main.php), nella sezione head il seguente link:

<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css"/>

A questo punto si possono utilizzare i datepicker di jquery ui all’interno delle pagine, con il seguente comando:

<?= $form->field($model, 'DtCreazione')->widget(DateControl::classname(), [
    'displayFormat' => 'php:d-M-Y H:i:s',
    'type'=>DateControl::FORMAT_DATETIME
    ]); ?>