Een Phalcon-project aanmaken en uitvoeren
Wat is Phalcon?
Phalcon is een open-source, high-performance PHP-webframework dat geïmplementeerd is als een C-extensie. Dankzij deze unieke implementatie verbruikt Phalcon erg weinig systeembronnen en presteert het aanzienlijk sneller dan de meeste traditionele PHP-frameworks. Phalcon volgt het MVC (Model-View-Controller)-architectuurmodel en biedt een reeks krachtige componenten, waaronder ORM (Object-Relational Mapping), templatesysteem, routering, caching, en event manager. Dit maakt het ideaal voor het snel bouwen van krachtige en snelle webapplicaties en API's.
Belangrijkste kenmerken en voordelen van Phalcon
- Uitstekende prestaties: Wordt uitgevoerd als een C-extensie en vermijdt daardoor de overhead van het parsen en laden van PHP-scripts, wat native prestaties oplevert.
- Efficiënt in middelengebruik: Zeer lage geheugendruk, geschikt voor applicaties waar hoge prestaties en schaalbaarheid vereist zijn.
- Volledig uitgerust: Bevat de meeste kerncomponenten voor webontwikkeling, waardoor afhankelijkheid van externe libraries wordt verminderd.
- Gebruiksvriendelijk: Duidelijke en consistente API en uitgebreide documentatie, zodat zelfs beginners snel aan de slag kunnen.
- Sterk ontkoppeld: Componenten zijn onafhankelijk ontworpen; ontwikkelaars kunnen naar behoefte specifieke componenten wisselen of gebruiken.
- Veiligheid: Biedt verschillende beveiligingsgerichte componenten, zoals input filtering, CSRF-bescherming, enz.
Phalcon is de ideale keuze voor het bouwen van snelle, schaalbare webapplicaties en API's, vooral wanneer snelheid en resource-efficiëntie cruciaal zijn.
Een Phalcon-project aanmaken en uitvoeren met ServBay
ServBay is een lokale webontwikkelomgeving speciaal voor macOS, met geïntegreerde ondersteuning voor diverse PHP-versies, databases (zoals MySQL, PostgreSQL, MongoDB, Redis) en webservers (Caddy, Nginx, Apache), evenals andere ontwikkelaarstools. Met ServBay kun je probleemloos de benodigde omgeving voor je Phalcon-project opzetten en beheren.
Deze handleiding begeleidt je bij het aanmaken van een basis Phalcon-project met behulp van de PHP-omgeving van ServBay, het configureren van de webserver voor toegang, en laat zien hoe je relationele (MySQL) en NoSQL (Redis) databases integreert.
Vereisten
Voordat je begint, zorg ervoor dat je aan de volgende voorwaarden voldoet:
- ServBay is geïnstalleerd en actief: Installeer en start ServBay op je macOS-systeem.
- De gewenste PHP-versie is ingeschakeld: Zorg ervoor dat de PHP-versie die je wilt gebruiken in ServBay is geactiveerd.
- Phalcon-extensie is ingeschakeld: ServBay bevat standaard de Phalcon-module, maar hij staat mogelijk niet standaard aan. Volg de instructies in het document Hoe de Phalcon-module van ServBay inschakelen om de juiste extensie voor jouw PHP-versie te activeren. Start daarna de PHP-dienst opnieuw.
- Composer is beschikbaar: ServBay bevat standaard Composer; je hoeft het niet apart te installeren. Controleer of je het
composer
-commando direct in je terminal kunt gebruiken.
Verschillende versies van Phalcon en DevTools
De Phalcon-framework- en de bijbehorende DevTools-versies moeten compatibel zijn met de gebruikte PHP-versie. Onderstaande tabel geeft een overzicht van veelgebruikte PHP-versies en de aanbevolen Phalcon-framework- en DevTools-versies:
PHP-versie | Aanbevolen Phalcon-versie | Aanbevolen DevTools-versie | Opmerkingen |
---|---|---|---|
PHP 5.6, 7.0, 7.1 | Phalcon 3.4.5 | 3.4.x | |
PHP 7.2, 7.3, 7.4 | Phalcon 4.1.2 | ~4.1 (of 4.3.x ) | |
PHP 8.0, 8.1, 8.2 | Phalcon 5.x | 5.0.x (officieel) | Officiële DevTools kan compatibiliteitsproblemen hebben met PHP 8.x. |
PHP 8.3, 8.4 | Phalcon 5.x | dev-master (fix-versie) | Gebruik de community-fix voor betere compatibiliteit. |
Belangrijk: Voor PHP 8.x en hoger kan de officiële Phalcon DevTools beperkte compatibiliteit bieden. Gebruik de community-fix-versie waar mogelijk. In het vervolg lees je hoe je DevTools via Composer met deze fix installeert.
Phalcon-project aanmaken
Aanbevolen websitepad
Voor eenvoudig beheer raadt ServBay aan om al je websiteprojecten in de standaard hoofdmap /Applications/ServBay/www
te plaatsen. Het voorbeeld in deze handleiding gebruikt diezelfde map.
Navigeer naar de webroot en maak een projectmap aan
Open de terminal, ga naar de webroot van ServBay en maak een nieuwe map aan voor je Phalcon-project (zoals
servbay-phalcon-app
):bashcd /Applications/ServBay/www mkdir servbay-phalcon-app cd servbay-phalcon-app
1
2
3Phalcon DevTools installeren
Phalcon DevTools is een set commandline-tools om code aan te maken, projecten te initialiseren en database migraties te beheren. Installeer DevTools via Composer. Afhankelijk van je PHP-versie:
Voor PHP 5.6, 7.0, 7.1 (Phalcon DevTools
^3.4
):bashcomposer require phalcon/devtools:"^3.4"
1Voor PHP 7.2, 7.3, 7.4 (Phalcon DevTools
~4.1
):bashcomposer require phalcon/devtools:"~4.1"
1Voor PHP 8.0, 8.1, 8.2, 8.3, 8.4 (Phalcon DevTools
dev-master
community-fix): Omdat de officiële DevTools mogelijk niet werkt met PHP 8.x, voeg je in je projectmap (/Applications/ServBay/www/servbay-phalcon-app
) onderstaand repositorydeel toe aancomposer.json
:json{ "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 }
1
2
3
4
5
6
7
8
9
10
11
12
13Daarna installeer of werk je DevTools bij met:
bashcomposer update
1
Composer creëert een
vendor
-map in de projectmap (servbay-phalcon-app
). De DevTools executables vind je ondervendor/bin/phalcon
.Projectbasis met Phalcon DevTools genereren
Gebruik de zojuist geïnstalleerde DevTools om een standaard Phalcon-projectstructuur aan te maken. De projectcode komt in een submap te staan (meestal met dezelfde naam als je project):
bashvendor/bin/phalcon project servbay-phalcon-app
1Dit creëert de map
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app
met een volledige Phalcon-projectstructuur erin.Ga naar de projectcode-map
Navigeer naar de net aangemaakte code-directory. Volgende stappen voer je hieruit:
bashcd servbay-phalcon-app
1Je bevindt je nu in
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app
.
Projectomgeving instellen
De configuratie van een Phalcon-project is meestal te vinden in app/config/config.php
. Hier stel je databaseverbindingen en app-paden in.
Configuratiebestand bewerken
Open
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/app/config/config.php
in je favoriete editor. Zoek, of voeg, het gedeelte voor databaseverbinding toe. ServBay's standaard MySQL/MariaDB-gebruiker isroot
zonder wachtwoord. Het is echter aangeraden om een sterk wachtwoord te kiezen. In het voorbeeld hieronder wordtpassword
gebruikt als placeholder; vervang dit naar eigen wens. De databaseservbay_phalcon_app
moet handmatig aangemaakt worden.phpreturn new \Phalcon\Config([ // ... overige configuratie ... 'database' => [ 'adapter' => 'Mysql', // Of 'Postgres', etc. 'host' => '127.0.0.1', 'username' => 'root', // Standaardgebruiker in ServBay 'password' => 'password', // <-- Vervang door jouw databasewachtwoord 'dbname' => 'servbay_phalcon_app', // <-- Vervang door jouw databasenaam ], // ... overige configuratie ... ]);
1
2
3
4
5
6
7
8
9
10
11Let op: Zorg dat de betreffende database service (MySQL/MariaDB) actief is in ServBay én dat gebruikersnaam en wachtwoord kloppen. Maak indien nodig de database
servbay_phalcon_app
zelf aan, bijvoorbeeld via phpMyAdmin of Adminer.
Webserver configureren (via ServBay Website-functie)
Om je Phalcon-project via de browser te bereiken, stel je een virtual host in via de Website-functie van ServBay.
- Open ServBay-app
- Ga naar ‘Websites’: Klik in het hoofdmenu op de optie ‘Websites’.
- Nieuwe website toevoegen: Klik op de knop voor nieuwe website.
- Naam: Bijvoorbeeld
My First Phalcon Dev Site
. - Domeinnaam: Bijvoorbeeld
servbay-phalcon-test.local
. ServBay zorgt voor automatische lokale.local
-domeinresolutie. - Websitetype: Kies
PHP
. - PHP-versie: Kies de PHP-versie waarin de Phalcon-module is ingeschakeld.
- Root-directory van de site: Zeer belangrijk! De Phalcon-entry file
index.php
staat meestal in depublic
-map. Kies als root-directory:/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/public
.
- Naam: Bijvoorbeeld
- Sla de instellingen op: Na opslaan worden wijzigingen meteen toegepast. Herstart indien nodig de webserver (Caddy of Nginx).
Raadpleeg Eerste website toevoegen voor meer details. Na het instellen regelt ServBay automatisch de lokale domeinnaam en webserverinstellingen.
Voorbeeldcode toevoegen
Laten we nu eenvoudige code toevoegen om de werking van het project te testen.
Routing instellen
Bewerk
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/app/config/routes.php
en voeg een eenvoudige route toe voor het rootpad/
:php<?php use Phalcon\Mvc\Router; $router = new Router(false); // Definieer standaardroute, map rootpad '/' naar IndexController's indexAction $router->add( '/', [ 'controller' => 'index', 'action' => 'index', ] ); // ... Meer routes kunnen hier toegevoegd worden ... $router->handle($_SERVER['REQUEST_URI']); return $router;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19Controller aanmaken
Maak/bewerk
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/app/controllers/IndexController.php
en voeg een simpeleindexAction
toe:php<?php namespace App\Controllers; // Zorg dat de namespace klopt use Phalcon\Mvc\Controller; class IndexController extends Controller { // Verwerkt aanvragen naar rootpad '/' public function indexAction() { // Geeft een simpele response terug return 'Hello ServBay!'; } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Website bezoeken
Sla de bestanden op en verzeker je dat ServBay draait. Open je webbrowser en ga naar de domeinnaam die je eerder instelde:
https://servbay-phalcon-test.local
Als alles werkt, zie je in de browser Hello ServBay!
.
Database-integratie
Phalcon heeft een krachtige database-abstractielaag en ORM. ServBay biedt diverse databases, waarmee je eenvoudig integreert. Hier volgen voorbeelden met MySQL en Redis.
Relationele databasevoorbeeld: MySQL
We tonen hoe je met de Phalcon-DB-adapter verbindt met ServBay's MySQL-service, plus simpele invoeg- en ophaalacties.
Databasestructuur aanmaken (via migratie)
Phalcon DevTools ondersteunt migrations voor database versiebeheer.
Genereer een migratiebestand: Draai in je code-directory (
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app
) het commando:bashvendor/bin/phalcon migration generate
1Er wordt een nieuw file aangemaakt in de
migrations
-map, bijvoorbeeldYYYYMMDDHHMMSS_MigrationName.php
.Bewerk migratiebestand: Open het aangemaakte bestand, en definieer daar een eenvoudige
users
-tabel in demorph
-methode:php<?php use Phalcon\Db\Column; use Phalcon\Db\Index; use Phalcon\Migrations\Mvc\Model\Migration; /** * Class UsersMigration_100 */ class UsersMigration_100 extends Migration // De klassenaam moet overeenkomen met het bestandsnaam { /** * Voer de migraties uit * * @return void */ 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'), ], 'options' => [ 'TABLE_ENGINE' => 'InnoDB', 'CHARACTER SET' => 'utf8mb4', 'COLLATE' => 'utf8mb4_unicode_ci', ], ]); } /** * Herstel de migraties * * @return void */ public function down() { // Optioneel: rollback-actie, zoals tabel verwijderen // $this->getConnection()->dropTable('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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70Let op: Zorg dat de klassenaam (bijv.
UsersMigration_100
) klopt met de bestandsnaam.Voer de migratie uit: Draai onderstaand commando om de migratie toe te passen, en zo de
users
-tabel aan te maken:bashvendor/bin/phalcon migration run
1Krijg je verbindingsfouten? Controleer de database-instellingen in
app/config/config.php
en of MySQL/MariaDB draait in ServBay.
Databaseverbinding instellen (eerder gedaan)
Je
database
-instellingen inapp/config/config.php
moeten wijzen naar ServBay's lokale MySQL/MariaDB-service (standaardhost
is127.0.0.1
, poort 3306, gebruikerroot
, wachtwoord zoals je gekozen hebt).Voorbeeldroutes toevoegen
Bewerk
app/config/routes.php
en voeg routes toe om gebruikers toe te voegen en uit te lezen:php<?php use Phalcon\Mvc\Router; $router = new Router(false); $router->add('/', [ 'controller' => 'index', 'action' => 'index', ]); // Route om gebruiker toe te voegen $router->add( '/mysql-add', [ 'controller' => 'index', 'action' => 'mysqlAdd', ] ); // Route om gebruikers op te halen $router->add( '/mysql', [ 'controller' => 'index', 'action' => 'mysql', ] ); $router->handle($_SERVER['REQUEST_URI']); return $router;
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
31Databaseacties in de controller implementeren
Bewerk
app/controllers/IndexController.php
, voegmysqlAddAction
enmysqlAction
toe. We gebruiken hier direct de Phalcon-DB-adapter.php<?php namespace App\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Db\Adapter\Pdo\Mysql; // Importeer de MySQL-adapter use Phalcon\Db\Enum; // Constanten voor fetchAll class IndexController extends Controller { public function indexAction() { return 'Hello ServBay!'; } // Voeg een gebruiker toe public function mysqlAddAction() { // Directe DB-verbinding (het is beter om dependency injection te gebruiken in productie) $connection = new Mysql([ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', // <-- Vervang door je wachtwoord 'dbname' => 'servbay_phalcon_app', 'charset' => 'utf8mb4', ]); // Voeg een demo-gebruiker toe $success = $connection->insert( 'users', // Tabelnaam ['ServBay Demo User', '[email protected]'], // Waarden ['name', 'email'] // Kolommen ); // Geef resultaat echo $success ? 'User added successfully.' : 'Failed to add user.'; } // Haal gebruikers op en laat zien public function mysqlAction() { // Verkrijg DB-verbinding $connection = new Mysql([ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', // <-- Vervang door je wachtwoord 'dbname' => 'servbay_phalcon_app', 'charset' => 'utf8mb4', ]); // Haal alle gebruikers op $users = $connection->fetchAll('SELECT * FROM users', Enum::FETCH_ASSOC); // Output als JSON header('Content-Type: application/json'); 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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57Let op: In productie wordt aanbevolen om de databaseverbinding als service te registreren (dependency injection), niet in elke actie apart aan te maken.
Voorbeeld testen
- Ga naar
https://servbay-phalcon-test.local/mysql-add
in je browser. Als alles goed gaat, zie je "User added successfully.". - Bezoek daarna
https://servbay-phalcon-test.local/mysql
. Je krijgt nu een JSON-array van records uit de tabel, inclusief de zojuist toegevoegde gebruiker.
- Ga naar
NoSQL-databasevoorbeeld: Redis
We tonen nu het gebruik van Redis, geleverd door ServBay, als cache in een Phalcon-project.
Redis-extensie installeren
De benodigde Redis-extensie is meestal standaard geactiveerd bij PHP in ServBay. Controleer dat de extensie aan staat bij jouw actieve PHP-versie; handmatig installeren is meestal niet nodig.
Redis-verbinding configureren
Voeg in
app/config/config.php
een configuratieblok toe met de Redis-gegevens. ServBay's Redis draait standaard op127.0.0.1:6379
.phpreturn new \Phalcon\Config([ // ... overige configuratie ... 'cache' => [ 'adapter' => 'Redis', 'host' => '127.0.0.1', 'port' => 6379, 'index' => 0, // Redis database-index, standaard 0 'persistent' => false, // Gebruik van persistente verbindingen 'auth' => null, // Vul het wachtwoord in als Redis dat gebruikt ], // ... overige configuratie ... ]);
1
2
3
4
5
6
7
8
9
10
11
12Voorbeeldroute toevoegen voor Redis
Bewerk
app/config/routes.php
en voeg een route toe voor het testen van Redis-cache:php<?php use Phalcon\Mvc\Router; $router = new Router(false); $router->add('/', [ 'controller' => 'index', 'action' => 'index', ]); $router->add('/mysql-add', [ 'controller' => 'index', 'action' => 'mysqlAdd', ]); $router->add('/mysql', [ 'controller' => 'index', 'action' => 'mysql', ]); // Route om Redis-cache te testen $router->add( '/redis', [ 'controller' => 'index', 'action' => 'redis', ] ); $router->handle($_SERVER['REQUEST_URI']); return $router;
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
32Redis-cache in de controller gebruiken
Voeg in
app/controllers/IndexController.php
de actieredisAction
toe om Redis-cache te demonstreren:php<?php namespace App\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Db\Adapter\Pdo\Mysql; use Phalcon\Db\Enum; use Phalcon\Cache\Adapter\Redis; // Importeer Redis-cache-adapter use Phalcon\Storage\SerializerFactory; // Importeer de serializer factory class IndexController extends Controller { public function indexAction() { return 'Hello ServBay!'; } public function mysqlAddAction() { $connection = new Mysql([/* ... */]); $success = $connection->insert(/* ... */); echo $success ? 'User added successfully.' : 'Failed to add user.'; } public function mysqlAction() { $connection = new Mysql([/* ... */]); $users = $connection->fetchAll('SELECT * FROM users', Enum::FETCH_ASSOC); header('Content-Type: application/json'); echo json_encode($users); } // Redis-cache voorbeeld public function redisAction() { // Maak serializer factory $serializerFactory = new SerializerFactory(); // Redis-cacheconfiguratie // Let op: moet kloppen met de 'cache'-sectie in app/config/config.php $options = [ 'defaultSerializer' => 'Json', // Slaat data standaard op als JSON 'lifetime' => 3600, // Cache duur (seconden), bijv. 1 uur 'host' => '127.0.0.1', 'port' => 6379, 'index' => 0, // Redis-database-index // 'auth' => 'your_redis_password', // Indien van toepassing ]; // Maak Redis-cacheadapter $cache = new Redis($serializerFactory, $options); $cacheKey = 'my_servbay_redis_cache_key'; $cachedData = $cache->get($cacheKey); // Probeer data uit cache if ($cachedData === null) { // Niet in cache gevonden echo "Data not found in cache, fetching from source..."; $cachedData = 'Data fetched from source: Hello Redis from ServBay!'; $cache->set($cacheKey, $cachedData); // Zet data in cache echo "Data stored in cache."; } else { // Gevonden in cache echo "Data found in cache: "; } // Retourneer de data (uit cache of na nieuw opslag) return $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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69Let op: In productie wordt caching meestal als service in de DI-container geplaatst, zodat je die overal probleemloos kunt gebruiken.
Voorbeeld testen
Ga naar
https://servbay-phalcon-test.local/redis
in je browser.- De eerste keer zie je "Data not found in cache, fetching from source...Data stored in cache." samen met "Data fetched from source: Hello Redis from ServBay!".
- Bij herhaald bezoek (binnen de cache-tijd) zie je "Data found in cache: " en "Data fetched from source: Hello Redis from ServBay!", dus komt het uit de cache.
Veelgestelde vragen (FAQ)
- Q: Krijg ik een 404 Not Found bij het bezoeken van de site?
- A: Controleer of bij de ServBay-website-instellingen de "website root directory" juist is ingesteld op de
public
map van je Phalcon-project (/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/public
). Kijk ook of de webserver (Caddy of Nginx) draait en de domeinnaam wordt herkend.
- A: Controleer of bij de ServBay-website-instellingen de "website root directory" juist is ingesteld op de
- Q: Foutmelding dat Phalcon-module niet wordt gevonden (zoals 'Class 'Phalcon\Mvc\Application' not found')?
- A: Dit duidt erop dat de Phalcon-extensie niet aanstaat voor de actieve PHP-versie. Ga terug naar ServBay, controleer of de juiste PHP-versie de Phalcon-extensie aan heeft, en herstart de PHP-service. Zie Hoe de Phalcon-module van ServBay inschakelen.
- Q: Databaseverbinding werkt niet?
- A: Controleer de databaseconfiguratie (
app/config/config.php
) op host, gebruikersnaam, wachtwoord, en database. Check of de database draait en de gebruiker rechten heeft en de database bestaat.
- A: Controleer de databaseconfiguratie (
Samenvatting
Met ServBay richt je in een handomdraai een krachtige en stabiele lokale ontwikkelomgeving in voor het Phalcon-framework. Deze handleiding nam je stap voor stap mee van projectopzet en webserverconfiguratie tot het toevoegen van MySQL- en Redis-integraties. Dankzij ServBay’s integratie van diverse softwarepakketten en een gebruiksvriendelijke interface is lokaal ontwikkelen sneller en eenvoudiger dan ooit, zodat jij je kunt focussen op je Phalcon-applicatie. We hopen dat deze gids je helpt succesvol te starten met ServBay en Phalcon voor snelle webontwikkeling!