Een Yii 2-project aanmaken en uitvoeren in ServBay
Overzicht: Wat is Yii 2?
Yii 2 is een krachtig, component-gebaseerd PHP-framework ontworpen voor het snel ontwikkelen van moderne webapplicaties. Het volgt het MVC-ontwerppatroon (Model-View-Controller) en biedt een rijke set functies en hulpmiddelen die ontwikkelaars helpen efficiënte, schaalbare en kwalitatieve webapps te bouwen. Populair vanwege zijn uitstekende prestaties, flexibele architectuur en robuuste ingebouwde functionaliteit — zoals caching, beveiliging en RESTful API-ondersteuning — geniet Yii 2 een brede community.
Belangrijkste kenmerken en voordelen van Yii 2
- Hoge prestaties: Yii 2 is geoptimaliseerd om grote hoeveelheden gelijktijdige verzoeken te verwerken en is geschikt voor veeleisende applicaties.
- Modulair: De frameworkstructuur is zeer modulair, wat het organiseren en hergebruiken van code vereenvoudigt.
- Beveiliging: Ingebouwde beveiligingsfuncties zoals inputvalidatie, output filtering, CSRF/XSS-protectie en authenticatie & autorisatie-frameworks.
- Gebruiksvriendelijk: Duidelijke API en uitgebreide documentatie verlagen de leercurve; snelle onboarding voor ontwikkelaars.
- Krachtige community: Een actieve ontwikkelaarsgemeenschap en een divers aanbod aan extensies maken ondersteuning en uitbreiding eenvoudig.
- Geïntegreerde tools: CLI-tools voor database-migratie, codegeneratie en meer verhogen de productiviteit.
Yii 2 is ideaal voor het bouwen van zakelijke applicaties, RESTful API's, portals en verschillende soorten webprojecten.
Een Yii 2-project uitvoeren met ServBay
ServBay is een lokale webontwikkelomgeving voor macOS en Windows. Het integreert PHP, verschillende databases (MySQL, PostgreSQL, MongoDB, Redis), webservers (Caddy, Nginx), en extra tools (Composer, Node.js, Python, Go, Java, enz.), en biedt ontwikkelaars een kant-en-klaar platform.
Deze handleiding laat zien hoe je met ServBay's PHP-omgeving, Composer en database-services een basis-Yii 2-applicatie opzet en runt. We gebruiken ServBay's “Websites”-functionaliteit om de lokale webserver te configureren en het project toegankelijk te maken.
Voorwaarden
Voordat je start, controleer of je:
- ServBay succesvol hebt geïnstalleerd en gestart op macOS of Windows.
- De benodigde PHP-versie (bijv. PHP 8.3 of hoger) in ServBay hebt geïnstalleerd/geactiveerd.
- In ServBay de database-service (MySQL of PostgreSQL) en caching-services (Memcached en Redis) hebt geïnstalleerd/geactiveerd.
Controleer en beheer geïnstalleerde pakketten en hun status via ServBay's hoofdinterface.
Een Yii 2-project aanmaken
TIP
ServBay raadt aan je projectbestanden onder de volgende directories op te slaan. Dit houdt je bestandsstructuur overzichtelijk en maakt het makkelijker om de “Websites”-functie van ServBay te gebruiken:
- macOS:
/Applications/ServBay/www - Windows:
C:\ServBay\www
Composer: ServBay heeft Composer vooraf geïnstalleerd; afzonderlijke installatie is niet nodig. Gebruik het
composer-commando direct in je terminal.Projectdirectory aanmaken: Open een terminal, ga naar ServBay's standaard website root en maak een nieuwe projectmap aan.
macOS:
bashcd /Applications/ServBay/www mkdir servbay-yii2-app cd servbay-yii2-app1
2
3Windows:
cmdcd C:\ServBay\www mkdir servbay-yii2-app cd servbay-yii2-app1
2
3Yii 2-project aanmaken via Composer: Voer het volgende uit in de
servbay-yii2-app-map om een basis-Yii 2-applicatiesjabloon te genereren:bashcomposer create-project --prefer-dist yiisoft/yii2-app-basic .1Dit download de Yii 2-basisapplicatie en alle afhankelijkheden naar de huidige map (
.). Het installatieproces kan enkele minuten duren.Ga naar de projectdirectory: Zorg dat je terminalpositie de root van het project is, aangezien daaropvolgende commando's daaruit worden uitgevoerd.
macOS:
bashcd /Applications/ServBay/www/servbay-yii2-app1Windows:
cmdcd C:\ServBay\www\servbay-yii2-app1
Basisconfiguratie
Na het aanmaken van je Yii 2-project moet je een aantal basisinzellingen doen, met name voor de database-verbinding en componentconfiguraties.
Databaseverbinding instellen: Pas je
config/db.php-bestand in de projectroot aan. Zet de gegevens voor jouw ServBay-databaseservice (MySQL of PostgreSQL) en de configuratie (standaardgebruiker is meestalroot, wachtwoord doorgaanspassword, tenzij aangepast).Maak om te beginnen in ServBay een nieuwe database voor dit project, bijvoorbeeld
servbay_yii2_app. Gebruik ServBay's Adminer-tool of je favoriete database client (zoals Sequel Ace, TablePlus). Adminer is bereikbaar via ServBay's databasegedeelte.Voor MySQL:
php<?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=127.0.0.1;dbname=servbay_yii2_app', // dbname moet overeenkomen met je aangemaakte database 'username' => 'root', // jouw databasegebruikersnaam 'password' => 'password', // jouw databasewachtwoord 'charset' => 'utf8mb4', // Gebruik utf8mb4 voor een bredere character set ];1
2
3
4
5
6
7
8
9Voor PostgreSQL:
php<?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'pgsql:host=127.0.0.1;port=5432;dbname=servbay_yii2_app', // dbname: jouw database, port meestal 5432 'username' => 'root', // jouw databasegebruikersnaam 'password' => 'password', // jouw databasewachtwoord 'charset' => 'utf8', 'schemaMap' => [ 'pgsql' => [ 'class' => 'yii\pgsql\Schema', 'defaultSchema' => 'public', // Standaard schema van PostgreSQL ], ], ];1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Bewerk het bestand aan de hand van jouw situatie.
Cache en Redis-componenten instellen: Bewerk
config/web.phpin de projectroot. Vul of wijzig hetcomponents-gedeelte om Memcached en Redis te configureren. Standaard gebruikt ServBay poort11211voor Memcached en6379voor Redis.php<?php // ... andere configuraties 'components' => [ // ... bestaande componenten zoals request, cache, user, errorHandler, log, urlManager 'cache' => [ 'class' => 'yii\caching\MemCache', 'servers' => [ [ 'host' => '127.0.0.1', 'port' => 11211, // standaardpoorten 'weight' => 100, ], ], ], 'redis' => [ 'class' => 'yii\redis\Connection', 'hostname' => '127.0.0.1', 'port' => 6379, // standaard Redis-poort 'database' => 0, // Redis-database-index ], // ... andere componenten ], // ... andere configuraties1
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
28Zorg dat Memcached en Redis actief zijn in ServBay. Om Redis als cache te gebruiken moet je het pakket
yiisoft/yii2-redisinstalleren (Composer installeert standaard basisafhankelijkheden, extra pakketten kun je handmatig metcomposer require yiisoft/yii2-redistoevoegen). Memcached gebruikt doorgaansyiisoft/yii2-memcached.
Webserver configureren (ServBay Websites)
Gebruik de “Websites”-functie van ServBay om je lokale webserver (Caddy of Nginx) zo in te stellen dat deze naar jouw Yii 2-project verwijst.
- Open de ServBay-app: Start ServBay.
- Ga naar website-instellingen: Zoek en klik in de interface op “Websites”.
- Voeg een nieuwe website toe: Klik op de knop voor een nieuwe site (meestal
+ofToevoegen). - Vul sitegegevens in:
- Naam: Geef een gemakkelijk herkenbare naam, bijvoorbeeld
Mijn eerste Yii 2 Dev Site. - Domein: Het lokale ontwikkeldomein, bijvoorbeeld
servbay-yii2-test.local. ServBay wijst dit automatisch toe aan127.0.0.1. - Websitetype: Kies
PHP. - PHP-versie: Selecteer de gewenste versie (bijv.
8.3). Zorg dat deze geïnstalleerd/geactiveerd is. - Website root directory: Heel belangrijk! Het publieke startpunt van de Yii 2-basisapp ligt in de
web-map onder de projectroot:- macOS:
/Applications/ServBay/www/servbay-yii2-app/web - Windows:
C:\ServBay\www\servbay-yii2-app\web
- macOS:
- Naam: Geef een gemakkelijk herkenbare naam, bijvoorbeeld
- Opslaan en toepassen: Sla de instellingen op. ServBay laadt de webserverconfiguratie automatisch opnieuw.
Lees meer over dit proces in ServBay’s documentatie: Je eerste website toevoegen.
ServBay genereert en vertrouwt automatisch SSL-certificaten (via ServBay User CA of ServBay Public CA), dus je kunt je site via HTTPS benaderen.
Voorbeeldcode toevoegen
Voeg om database- en cachefunctionaliteit te demonstreren een aantal voorbeeldacties toe aan de standaard controller van Yii 2.
Bewerk het bestand controllers/SiteController.php in je projectmap en voeg deze methoden toe aan de SiteController-klasse:
php
<?php
namespace app\controllers;
use Yii;
use yii\web\Controller;
use yii\web\Response;
use yii\db\Exception as DbException; // Importeer DB-exceptieklasse
class SiteController extends Controller
{
/**
* Toont homepage.
*
* @return string
*/
public function actionIndex()
{
return $this->render('index');
}
/**
* Demonstreert gebruik Memcached.
*
* @return Response
*/
public function actionMemcached()
{
$cache = Yii::$app->cache;
$key = 'my_memcached_test_key';
$data = 'Hello Memcached from ServBay!';
$duration = 60; // Cache 60 seconden
if ($cache->set($key, $data, $duration)) {
$value = $cache->get($key);
return $this->asText("Memcached succesvol ingesteld. Waarde opgehaald: " . $value);
} else {
return $this->asText("Gegevens opslaan in Memcached mislukt. Controleer de service en configuratie.");
}
}
/**
* Demonstreert gebruik Redis.
*
* @return Response
*/
public function actionRedis()
{
$redis = Yii::$app->redis;
$key = 'my_redis_test_key';
$data = 'Hello Redis from ServBay!';
try {
if ($redis->set($key, $data)) {
$value = $redis->get($key);
return $this->asText("Redis succesvol ingesteld. Waarde opgehaald: " . $value);
} else {
return $this->asText("Gegevens opslaan in Redis mislukt. Controleer de service en configuratie.");
}
} catch (\yii\base\Exception $e) {
return $this->asText("Redis-fout: " . $e->getMessage() . ". Controleer de service en configuratie.");
}
}
/**
* Demonstreert toevoegen gebruiker aan de database.
* Vereist een 'users'-tabel.
*
* @return Response
*/
public function actionMysqlAdd() // Werkt ook met PostgreSQL indien juist geconfigureerd
{
try {
$count = Yii::$app->db->createCommand()->insert('users', [
'name' => 'ServBay Demo User', // Merkspecifieke demo-naam
'email' => 'demo-user@servbay.test', // Merkspecifieke demo-e-mail
])->execute();
return $this->asText("Gebruiker succesvol toegevoegd. Aantal aangepaste rijen: " . $count);
} catch (DbException $e) {
return $this->asText("Gebruiker toevoegen aan database mislukt. Fout: " . $e->getMessage() . ". Controleer de databaseservice, configuratie en of de 'users'-tabel bestaat.");
}
}
/**
* Haalt gebruikers op uit de database.
* Vereist een 'users'-tabel.
*
* @return Response
*/
public function actionMysql() // Werkt ook met PostgreSQL indien juist geconfigureerd
{
try {
$users = Yii::$app->db->createCommand('SELECT id, name, email FROM users')->queryAll();
// Format output: voorkom directe weergave van gevoelige velden of onoverzichtelijke output
$output = "Opgehaalde gebruikers:\n";
foreach ($users as $user) {
$output .= "- ID: {$user['id']}, Naam: {$user['name']}, E-mail: {$user['email']}\n";
}
return $this->asText($output);
} catch (DbException $e) {
return $this->asText("Gebruikers ophalen uit database mislukt. Fout: " . $e->getMessage() . ". Controleer de databaseservice, configuratie en of de 'users'-tabel bestaat.");
}
}
// Indien je PostgreSQL gebruikt, kun je aparte actions maken, maar meestal werkt de db-component universeel
// public function actionPgsqlAdd() { ... }
// public function actionPgsql() { ... }
/**
* Format output als platte tekst.
* @param string $text
* @return Response
*/
protected function asText($text)
{
Yii::$app->response->format = Response::FORMAT_RAW;
Yii::$app->response->getHeaders()->add('Content-Type', 'text/plain');
return $text;
}
/**
* Format output als JSON.
* @param mixed $data
* @return Response
*/
protected function asJson($data)
{
Yii::$app->response->format = Response::FORMAT_JSON;
return $data;
}
}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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
Let op: in actionMysqlAdd en actionMysql is foutafhandeling toegevoegd en de output iets aangepast voor duidelijkheid. Demo-naam en e-mail zijn op ServBay-branding gebaseerd.
Bewerk het bestand views/site/index.php in de projectmap — dit hoort bij actionIndex. Je kunt de standaardinhoud behouden of aanpassen:
php
<?php
/* @var $this yii\web\View */
/* @var $name string */
/* @var $message string */
/* @var $exception Exception */
use yii\helpers\Html;
$this->title = 'Mijn Yii2 Applicatie op ServBay'; // Titel bijgewerkt
?>
<div class="site-index">
<div class="jumbotron">
<h1>Gefeliciteerd!</h1>
<p class="lead">Je hebt succesvol een Yii2-applicatie aangemaakt en geconfigureerd in ServBay!</p>
<p><a class="btn btn-lg btn-success" href="https://www.yiiframework.com">Aan de slag met Yii</a></p>
</div>
<div class="body-content">
<h2>Demonstraties</h2>
<ul>
<li><a href="<?= Html::toRoute('site/memcached') ?>">Test Memcached</a></li>
<li><a href="<?= Html::toRoute('site/redis') ?>">Test Redis</a></li>
<li><a href="<?= Html::toRoute('site/mysql-add') ?>">Gebruiker toevoegen aan DB</a> (vereist 'users'-tabel)</li>
<li><a href="<?= Html::toRoute('site/mysql') ?>">Gebruikers ophalen uit DB</a> (vereist 'users'-tabel)</li>
</ul>
<p>Zorg dat Memcached, Redis en je gekozen database (MySQL/PostgreSQL) actief zijn in ServBay en correct zijn geconfigureerd in `config/web.php` en `config/db.php`.</p>
<p>Voor databasevoorbeelden dien je eerst de 'users'-tabel aan te maken met behulp van Yii-migraties (zie hieronder).</p>
</div>
</div>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
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
Deze weergave bevat handige links om je nieuwe controlleracties direct te testen.
Relationele database: tabelstructuur aanmaken (migratie)
Om databasevoorbeelden (actionMysqlAdd, actionMysql) te laten werken, moet je de users-tabel creëren. Met Yii’s migratiesysteem beheer je database-schemas eenvoudig.
Maak migratiebestand via Gii tool: Open een terminal, zorg dat je in de projectroot bent en run het Yii-consolecommando:
Projectpad:
- macOS:
/Applications/ServBay/www/servbay-yii2-app - Windows:
C:\ServBay\www\servbay-yii2-app
bashphp yii migrate/create create_users_table1Beantwoord de bevestigingsvraag met
yes. Dit maakt een PHP-migratiebestand, bijvoorbeeldmYYYYMMDD_HHMMSS_create_users_table.php.- macOS:
Bewerk het migratiebestand: Pas het zojuist aangemaakte bestand aan en vul in de
up()-methode de structuur van deusers-tabel in.php<?php use yii\db\Migration; /** * Maakt de tabel `{{%users}}` aan. */ class mXXXXXXXXXXXXXX_create_users_table extends Migration // XXXXXXXXXXXXXX is tijdstempel { /** * {@inheritdoc} */ public function up() { $this->createTable('{{%users}}', [ // '{{%users}}' ondersteunt tabelprefixes 'id' => $this->primaryKey(), 'name' => $this->string()->notNull(), 'email' => $this->string()->notNull()->unique(), 'created_at' => $this->timestamp()->defaultExpression('CURRENT_TIMESTAMP'), 'updated_at' => $this->timestamp()->defaultExpression('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'), ]); // Optioneel: index aanmaken voor snellere queries $this->createIndex( 'idx-users-email', '{{%users}}', 'email', true // true: unieke index ); } /** * {@inheritdoc} */ public function down() { // Verwijder index $this->dropIndex( 'idx-users-email', '{{%users}}' ); // Verwijder tabel $this->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
46Vervang
mXXXXXXXXXXXXXX_create_users_tabledoor je eigen bestandsnaam.Voer de migratie uit: Voer in de terminal in de projectroot het commando uit om de migratie te draaien; dit zal, volgens
up(), deusers-tabel aanmaken.bashphp yii migrate1Bevestig met
yes. Je zou nu een bevestiging moeten zien dat de tabel succesvol aangemaakt is.
Website openen en functionaliteit testen
Open je browser en ga naar het domein dat je in ServBay hebt ingesteld: https://servbay-yii2-test.local.
- Bezoek
https://servbay-yii2-test.local: Je ziet de Yii 2-basisappwelkomstpagina en de demo-links inviews/site/index.php. - Klik op "Test Memcached" of bezoek
https://servbay-yii2-test.local/index.php?r=site/memcached: Bij actieve en goed geconfigureerde Memcached-service verschijnt de tekst "Memcached succesvol ingesteld...". - Klik op "Test Redis" of bezoek
https://servbay-yii2-test.local/index.php?r=site/redis: Bij een werkende Redis-service verschijnt "Redis succesvol ingesteld...". - Klik op "Gebruiker toevoegen aan DB" of bezoek
https://servbay-yii2-test.local/index.php?r=site/mysql-add: Bij goed werkende database en bestaandeusers-tabel verschijnt "Gebruiker succesvol toegevoegd...". Je voegt steeds een nieuwe gebruiker toe (tenzij het e-mailveld uniek is en al bestaat). - Klik op "Gebruikers ophalen uit DB" of bezoek
https://servbay-yii2-test.local/index.php?r=site/mysql: Bij juiste werking zie je een overzicht van alle gebruikers uit de tabelusers.
Problemen? Controleer of alle relevante ServBay-services actief zijn (PHP, webserver, database, Memcached, Redis), of je Yii-configuratiebestanden (config/db.php, config/web.php) kloppen en of de benodigde database-tabellen zijn aangemaakt.
Veelgestelde vragen (FAQ)
- Waarom zegt de browser “Site niet bereikbaar” of verschijnt er een SSL-fout? Zorg dat je domein correct is toegevoegd bij “Websites” in ServBay en dat de ServBay-app draait. ServBay regelt automatisch lokale DNS en SSL-certificaten. Bij certificaatfouten: vertrouw ServBay User CA of ServBay Public CA zoals beschreven in de ServBay-documentatie.
- Composer-commando werkt niet? Controleer of Composer geactiveerd is in ServBay en dat je het commando in de terminal van macOS uitvoert. ServBay voegt Composer automatisch toe aan je PATH.
- Databaseverbinding faalt? Controleer of de juiste database-service (MySQL/PostgreSQL) in ServBay draait. Controleer in
config/db.phpde juistedsn,username,password, en of je de databaseservbay_yii2_apphebt aangemaakt. Verifieer met Adminer. - Memcached/Redis-verbinding faalt? Controleer of Memcached/Redis actief zijn in ServBay. Check in
config/web.phpofhostenportkloppen (standaard127.0.0.1en de genoemde poort). - Database-migratie (
php yii migrate) werkt niet? Controleer ofconfig/db.phpcorrect is ingesteld en de database-service draait met de database aangemaakt. Databasemigratie vereist een actieve en toegankelijke databank. - Waarom zegt
actionMysqlAdd/actionMysqldat de tabel niet bestaat? Run eerst het migratiecommandophp yii migrateom deusers-tabel aan te maken. - Hoe bekijk ik de PHP-errorlog? ServBay centraliseert logs van PHP, webserver, enz. Bekijk deze via het “Logs”-gedeelte in de ServBay-interface voor foutdiagnose.
Samenvatting
Met ServBay kun je op macOS en Windows moeiteloos een volledige lokale ontwikkelomgeving opzetten om Yii 2-projecten te draaien. Vooraf geïnstalleerde Composer, PHP-versiebeheer, geïntegreerde database- en cachingservices en eenvoudige websiteconfiguratie maken het opzetten en ontwikkelen van Yii 2-projecten veel eenvoudiger. Volg deze gids om snel te starten met je Yii 2-ontwikkelavontuur en profiteer van de krachtige tools die ServBay biedt voor maximale productiviteit.
Veel succes met je ontwikkeling!
