Creazione e gestione di un progetto Phalcon
Cos'è Phalcon?
Phalcon è un framework PHP ad alte prestazioni, implementato come estensione C, che offre un'efficienza di esecuzione molto elevata. Utilizza l'architettura MVC (Model-View-Controller) e mira a fornire agli sviluppatori un'esperienza di sviluppo rapida e flessibile, mantenendo alti livelli di prestazioni.
Caratteristiche e vantaggi principali di Phalcon
- Alte prestazioni: Essendo implementato come estensione in C, Phalcon offre prestazioni eccezionali.
- Ricchezza delle funzionalità: Include funzionalità come ORM, motore di template, routing, caching, code, e molto altro, soddisfacendo diverse esigenze di sviluppo.
- Basso consumo di memoria: Grazie alla sua implementazione unica, Phalcon consuma pochissima memoria durante l'esecuzione.
- Facilità d'uso: Fornisce API semplici e ben documentate che aiutano gli sviluppatori ad iniziare velocemente.
- Design modulare: È possibile scegliere e utilizzare diversi componenti secondo le necessità, offrendo grande flessibilità.
Phalcon è una scelta ideale per costruire applicazioni web e API ad alte prestazioni, adatto a progetti che vanno da piccole applicazioni a grandi sistemi enterprise.
Creare e gestire un progetto Phalcon usando ServBay
In questo articolo, useremo l'ambiente PHP offerto da ServBay per creare e gestire un progetto Phalcon. Utilizzeremo la funzione 'Host' di ServBay per configurare il server web e accedere al progetto con una semplice configurazione.
Nota per gli utenti di NGINX o Apache
Per chi proviene da NGINX o Apache, ServBay utilizza di default Caddy come server web. Ci sono alcuni punti di cambiamento chiave da considerare:
Configurazione di Caddy
ServBay include Caddy di default con una configurazione ottimizzata e testata. Gli sviluppatori devono gestire il sito usando la funzione 'Host' di ServBay senza modificare manualmente i file di configurazione di Caddy.
Regole di riscrittura e .htaccess
In NGINX e Apache, gli sviluppatori devono di solito scrivere da soli le regole di riscrittura e i file .htaccess. Tuttavia, le regole di Caddy sono già preconfigurate in ServBay, quindi a meno che non ci siano bisogno particolari, non è necessario scriverle manualmente.
Ulteriori informazioni
Per maggiori dettagli, consulta i seguenti riferimenti: Rewrite e htaccess, Come migrare un sito Apache a ServBay, Come migrare un sito NGINX a ServBay.
Nota: Abilitare il modulo Phalcon
ServBay include il modulo Phalcon, che deve essere abilitato e PHP deve essere riavviato. Consulta Come abilitare il modulo Phalcon su ServBay per maggiori dettagli.
Versioni di Phalcon e DevTools
A seconda della versione di PHP, è necessario installare diverse versioni di Phalcon DevTools:
- PHP 5.6, 7.0, 7.1: Phalcon 3.4.5
- Versione corrispondente di Phalcon DevTools:
3.4.x
- Versione corrispondente di Phalcon DevTools:
- PHP 7.2, 7.3, 7.4: Phalcon 4.1.2
- Versione corrispondente di Phalcon DevTools:
4.3.x
- Versione corrispondente di Phalcon DevTools:
- PHP 8.0, 8.1, 8.2, 8.3, 8.4: Phalcon 5.7.0
- Versione corrispondente di Phalcon DevTools:
5.0.x
(si consiglia di usare la versione corretta vista la scarsa compatibilità di DevTools ufficiale con PHP 8.x)
- Versione corrispondente di Phalcon DevTools:
Creare un progetto Phalcon
TIP
ServBay consiglia agli sviluppatori di mettere i propri siti nella directory /Applications/ServBay/www
per una gestione più facile.
Installare Composer
Composer viene fornito di default con ServBay, quindi non è necessario installarlo separatamente.
Creare la directory del progetto
Crea la directory del progetto e accedi:
bashcd /Applications/ServBay/www mkdir servbay-phalcon-app cd servbay-phalcon-app
1
2
3Installare Phalcon DevTools
A seconda della versione di PHP, installa la versione corrispondente di Phalcon DevTools:
PHP 5.6, 7.0, 7.1:
bashcomposer require phalcon/devtools:"^3.4"
1PHP 7.2, 7.3, 7.4:
bashcomposer require phalcon/devtools:"~4.1"
1PHP 8.0, 8.1, 8.2, 8.3, 8.4:
Crea un file
composer.json
con il seguente contenuto:
{
"repositories": [
{
"url": "https://github.com/daleffe/phalcon-devtools-5.x-fixed.git",
"type": "git"
}
],
"require": {
"phalcon/devtools": "dev-master"
},
"minimum-stability": "dev",
"prefer-stable": true
}
2
3
4
5
6
7
8
9
10
11
12
13
Poi esegui:
composer update
Creare un progetto Phalcon
Usa Phalcon DevTools per creare un nuovo progetto Phalcon:
bashvendor/bin/phalcon project servbay-phalcon-app
1Accedere alla directory del progetto
Accedi alla directory del progetto Phalcon appena creata:
bashcd servbay-phalcon-app
1
Configurazione iniziale
Configurare le variabili d'ambiente
Configura le informazioni di connessione al database e altre variabili d'ambiente nel file
app/config/config.php
. Assicurati che la configurazione sia corretta:phpreturn new \Phalcon\Config([ 'database' => [ 'adapter' => 'Mysql', 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ], ]);
1
2
3
4
5
6
7
8
9
Configurazione del server web
Usa la funzione 'Host' di ServBay per accedere al progetto Phalcon attraverso il server web. Nel pannello 'Host' di ServBay, aggiungi un nuovo host con le seguenti configurazioni:
- Nome:
My First Phalcon Dev Site
- Dominio:
servbay-phalcon-test.local
- Tipo di sito:
PHP
- Versione PHP: Seleziona la versione di PHP corrispondente
- Root del sito:
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/public
Per i dettagli sui passaggi, consulta Aggiungere il primo sito web.
Aggiungere il codice di esempio
Aggiungi il seguente codice al file app/config/routes.php
per far visualizzare "Hello ServBay!":
$router->add(
'/',
[
'controller' => 'index',
'action' => 'index',
]
);
2
3
4
5
6
7
Aggiungi il seguente codice al file app/controllers/IndexController.php
:
namespace App\Controllers;
use Phalcon\Mvc\Controller;
class IndexController extends Controller
{
public function indexAction()
{
echo 'Hello ServBay!';
}
}
2
3
4
5
6
7
8
9
10
11
Accedere al sito
Apri il browser e visita https://servbay-phalcon-test.local
, vedrai che la pagina visualizza Hello ServBay!
.
Esempio di utilizzo di un database NoSQL
Esempio di Memcached
Installare l'estensione Memcached
Memcached è già preinstallato in ServBay, quindi non è necessaria alcuna installazione aggiuntiva.
Configurare Memcached
Aggiungi le informazioni di connessione a Memcached nel file
app/config/config.php
:phpreturn new \Phalcon\Config([ 'database' => [ 'adapter' => 'Mysql', 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ], 'cache' => [ 'adapter' => 'Memcached', 'host' => '127.0.0.1', 'port' => 11211, ], ]);
1
2
3
4
5
6
7
8
9
10
11
12
13
14Configurare le rotte
Aggiungi il seguente codice in
app/config/routes.php
:php$router->add( '/memcached', [ 'controller' => 'index', 'action' => 'memcached', ] );
1
2
3
4
5
6
7Utilizzare Memcached
Usare la cache nel controller:
phpnamespace App\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Cache\Backend\Memcached; use Phalcon\Cache\Frontend\Data as FrontData; class IndexController extends Controller { public function memcachedAction() { $frontCache = new FrontData([ 'lifetime' => 86400 ]); $cache = new Memcached($frontCache, [ 'host' => '127.0.0.1', 'port' => 11211, ]); $cacheKey = 'my_cache_key'; $cachedData = $cache->get($cacheKey); if ($cachedData === null) { $cachedData = 'Hello Memcached!'; $cache->save($cacheKey, $cachedData); } echo $cachedData; } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30Apri il browser e visita
https://servbay-phalcon-test.local/memcached
.
Esempio di Redis
Installare l'estensione Redis
Redis è già preinstallato in ServBay, quindi non è necessaria alcuna installazione aggiuntiva.
Configurare Redis
Aggiungi le informazioni di connessione a Redis nel file
app/config/config.php
:phpreturn new \Phalcon\Config([ 'database' => [ 'adapter' => 'Mysql', 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ], 'cache' => [ 'adapter' => 'Redis', 'host' => '127.0.0.1', 'port' => 6379, ], ]);
1
2
3
4
5
6
7
8
9
10
11
12
13
14Configurare le rotte
Aggiungi il seguente codice in
app/config/routes.php
:php$router->add( '/redis', [ 'controller' => 'index', 'action' => 'redis', ] );
1
2
3
4
5
6
7Utilizzare Redis
Usare la cache nel controller:
phpnamespace App\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Cache\Backend\Redis; use Phalcon\Cache\Frontend\Data as FrontData; class IndexController extends Controller { public function redisAction() { $frontCache = new FrontData([ 'lifetime' => 86400 ]); $cache = new Redis($frontCache, [ 'host' => '127.0.0.1', 'port' => 6379, ]); $cacheKey = 'my_cache_key'; $cachedData = $cache->get($cacheKey); if ($cachedData === null) { $cachedData = 'Hello Redis!'; $cache->save($cacheKey, $cachedData); } echo $cachedData; } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30Apri il browser e visita
https://servbay-phalcon-test.local/redis
.
Esempio di utilizzo di un database relazionale
Creazione della struttura del database e dei file di migrazione
Creare i file di migrazione
Usa Phalcon DevTools per creare i file di migrazione:
bashvendor/bin/phalcon migration generate --directory=servbay-phalcon-app
1Modificare i file di migrazione
Crea un nuovo file di migrazione nella directory
migrations
e definisci la struttura del database:phpuse Phalcon\Db\Column; use Phalcon\Db\Index; use Phalcon\Migrations\Mvc\Model\Migration; class UsersMigration_100 extends Migration { public function morph() { $this->morphTable('users', [ 'columns' => [ new Column( 'id', [ 'type' => Column::TYPE_INTEGER, 'autoIncrement' => true, 'notNull' => true, 'primary' => true, ] ), new Column( 'name', [ 'type' => Column::TYPE_VARCHAR, 'size' => 255, 'notNull' => true, ] ), new Column( 'email', [ 'type' => Column::TYPE_VARCHAR, 'size' => 255, 'notNull' => true, 'unique' => true, ] ), ], 'indexes' => [ new Index('PRIMARY', ['id'], 'PRIMARY'), new Index('email_UNIQUE', ['email'], 'UNIQUE'), ], ]); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44Eseguire la migrazione
Usa il comando Phalcon DevTools per eseguire la migrazione e creare le tabelle nel database:
bashvendor/bin/phalcon migration run --directory=servbay-phalcon-app
1
Esempio di MySQL
Configurare MySQL
Configura le informazioni di connessione MySQL nel file
app/config/config.php
:phpreturn new \Phalcon\Config([ 'database' => [ 'adapter' => 'Mysql', 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ], ]);
1
2
3
4
5
6
7
8
9Configurare le rotte
Aggiungi il seguente codice in
app/config/routes.php
:php$router->add( '/mysql-add', [ 'controller' => 'index', 'action' => 'mysqlAdd', ] ); $router->add( '/mysql', [ 'controller' => 'index', 'action' => 'mysql', ] );
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Scrivere i dati utente
Scrivi i dati utente nel controller:
phpnamespace App\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Db\Adapter\Pdo\Mysql; class IndexController extends Controller { public function mysqlAddAction() { $connection = new Mysql([ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ]); $success = $connection->insert( 'users', ['ServBay', '[email protected]'], ['name', 'email'] ); echo $success ? 'User added' : 'Failed to add user'; } public function mysqlAction() { $connection = new Mysql([ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ]); $users = $connection->fetchAll('SELECT * FROM users', \Phalcon\Db\Enum::FETCH_ASSOC); echo json_encode($users); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39Apri il browser e visita
https://servbay-phalcon-test.local/mysql-add
ehttps://servbay-phalcon-test.local/mysql
.
Esempio di PostgreSQL
Configurare PostgreSQL
Configura le informazioni di connessione PostgreSQL nel file
app/config/config.php
:phpreturn new \Phalcon\Config([ 'database' => [ 'adapter' => 'Postgresql', 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ], ]);
1
2
3
4
5
6
7
8
9Configurare le rotte
Aggiungi il seguente codice in
app/config/routes.php
:php$router->add( '/pgsql-add', [ 'controller' => 'index', 'action' => 'pgsqlAdd', ] ); $router->add( '/pgsql', [ 'controller' => 'index', 'action' => 'pgsql', ] );
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Scrivere i dati utente
Scrivi i dati utente nel controller:
phpnamespace App\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Db\Adapter\Pdo\Postgresql; class IndexController extends Controller { public function pgsqlAddAction() { $connection = new Postgresql([ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ]); $success = $connection->insert( 'users', ['ServBay',
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19