Een Yii 2-project aanmaken en uitvoeren in ServBay
Overzicht: Wat is Yii 2?
Yii 2 is een krachtig en componentgebaseerd PHP-framework, ontworpen voor de snelle ontwikkeling van moderne webapplicaties. Het volgt het MVC-ontwerppatroon (Model-View-Controller) en biedt een uitgebreide set functies en tools die ontwikkelaars helpen om efficiënte, schaalbare en hoogwaardige webapplicaties te bouwen. Dankzij zijn uitstekende prestaties, flexibele architectuur en robuuste ingebouwde functies (zoals caching, beveiliging en ondersteuning voor RESTful API’s) is Yii 2 enorm populair geworden.
Belangrijkste kenmerken en voordelen van Yii 2
- Hoge prestaties: Yii 2 is zorgvuldig geoptimaliseerd en kan hoge vanafvragen aan, ideaal voor prestatiekritische applicaties.
- Modulair: Het framework is zeer modulair opgebouwd, waardoor je eenvoudig code kunt organiseren en componenten kunt hergebruiken.
- Sterke beveiliging: Bevat allerlei beveiligingsopties, zoals inputvalidatie, outputfiltering, CSRF/XSS-bescherming en authenticatie/autorisatie.
- Gebruikersvriendelijk: De duidelijke, intuïtieve API en uitgebreide documentatie zorgen voor een snelle leercurve en een soepele start.
- Sterke community: Met een actief ontwikkelaarsnetwerk en een groot aanbod aan uitbreidingen kun je snel hulp en inspiratie vinden.
- Ingebouwde tools: Bevat krachtige commandlinetools voor taken als database-migraties, codegeneratie en projectbeheer.
Yii 2 is ideaal voor het bouwen van bedrijfsapplicaties, RESTful API’s, portalen en vele andere soorten webprojecten.
Een Yii 2-project uitvoeren met ServBay
ServBay is een speciaal voor macOS ontworpen lokale webontwikkelomgeving. Het bevat PHP, diverse databases (zoals MySQL, PostgreSQL, MongoDB, Redis), webservers (Caddy, Nginx) en tal van tools voor ontwikkelaars (zoals Composer, Node.js, Python, Go, Java, enz.). ServBay biedt hiermee een direct bruikbare ontwikkelomgeving, waardoor je snel aan de slag kunt.
Deze gids laat zien hoe je met de PHP-omgeving, Composer-tool en databaseservices van ServBay een basisapplicatie opzet in Yii 2. We maken gebruik van de “Websites”-functie van ServBay om de lokale webserver te configureren en lopen stap voor stap door het proces om het project bereikbaar en werkend te maken.
Vereisten
Voordat je van start gaat, zorg ervoor dat je:
- ServBay succesvol hebt geïnstalleerd en gestart op macOS.
- In ServBay de gewenste PHP-versie (bijvoorbeeld PHP 8.3 of hoger) hebt geïnstalleerd en geactiveerd.
- De database(s) (MySQL of PostgreSQL) en cache-diensten (Memcached en Redis) die je wilt gebruiken, zijn ingeschakeld.
Je kunt in het hoofdvenster van ServBay eenvoudig zien welke softwarepakketten zijn geïnstalleerd en actief zijn.
Een Yii 2-project aanmaken
TIP
ServBay raadt aan om je projectbestanden in de map /Applications/ServBay/www
te plaatsen. Dit houdt de structuur overzichtelijk en maakt het configureren via de ServBay “Websites”-functie efficiënt.
Composer: ServBay heeft Composer al standaard ingebouwd, je hoeft dit dus niet apart te installeren. Je kunt direct het
composer
-commando gebruiken in je terminal.Projectmap aanmaken: Open je terminal, ga naar de standaard webroot van ServBay en maak een nieuwe projectmap.
bashcd /Applications/ServBay/www mkdir servbay-yii2-app cd servbay-yii2-app
1
2
3Maak een Yii 2-project met Composer: Voer onder
servbay-yii2-app
het Composer-commando uit om een nieuw Yii 2 “basic” applicatietemplate aan te maken.bashcomposer create-project --prefer-dist yiisoft/yii2-app-basic .
1Deze opdracht downloadt het Yii 2-basistemplate en alle bijbehorende afhankelijkheden in de huidige map (
.
). Wacht rustig tot Composer het proces heeft afgerond.Ga naar de projectmap: Zorg dat je terminal zich bevindt in de hoofdmap van je nieuwe project,
/Applications/ServBay/www/servbay-yii2-app
. Alle volgende commando’s voer je hier uit.bashcd /Applications/ServBay/www/servbay-yii2-app
1
Basisconfiguratie
Na het creëren van je Yii 2-project moet je enkele belangrijke instellingen doorvoeren, met name voor de databaseverbinding en enkele componenten.
Databaseverbinding instellen: Bewerk het bestand
config/db.php
in de hoofdmap van je project. Werk de gegevens bij op basis van de database die je in ServBay gebruikt (MySQL of PostgreSQL) en de ingestelde logins (meestal is de standaardgebruikerroot
met het wachtwoordpassword
, tenzij je dit hebt aangepast).Maak eerst een database aan in ServBay, bijvoorbeeld met de naam
servbay_yii2_app
. Gebruik hiervoor de ingebouwde Adminer-tool of een andere database-client (zoals Sequel Ace, TablePlus, enz.). Adminer is direct toegankelijk via het databasegedeelte binnen je ServBay-app.Voor MySQL:
php<?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=127.0.0.1;dbname=servbay_yii2_app', // dbname is de aangemaakte database 'username' => 'root', // Je databasegebruiker 'password' => 'password', // Je databasewachtwoord 'charset' => 'utf8mb4', // Gebruik utf8mb4 voor brede tekensetondersteuning ];
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 is de aangemaakte database; standaardpoort is 5432 'username' => 'root', // Je databasegebruiker 'password' => 'password', // Je databasewachtwoord 'charset' => 'utf8', 'schemaMap' => [ 'pgsql' => [ 'class' => 'yii\pgsql\Schema', 'defaultSchema' => 'public', // Standaard PostgreSQL-schema ], ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Kies en pas
config/db.php
aan volgens jouw situatie.Cache- en Redis-componenten instellen: Bewerk het bestand
config/web.php
in de hoofdmap. Pas hetcomponents
-gedeelte aan om Memcached en Redis in te stellen. De standaardpoort voor Memcached is11211
, voor Redis6379
.php<?php // ... Overige configuraties 'components' => [ // ... Bestaande componentconfiguraties (zoals request, cache, user, errorHandler, log, urlManager) 'cache' => [ 'class' => 'yii\caching\MemCache', 'servers' => [ [ 'host' => '127.0.0.1', 'port' => 11211, // Standaardpoort Memcached 'weight' => 100, ], ], ], 'redis' => [ 'class' => 'yii\redis\Connection', 'hostname' => '127.0.0.1', 'port' => 6379, // Standaardpoort Redis 'database' => 0, // Redis database index ], // ... Overige componenten ], // ... Overige configuraties
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
28Controleer of Memcached en Redis in ServBay daadwerkelijk gestart zijn. Om Redis als cache te gebruiken, moet het pakket
yiisoft/yii2-redis
geïnstalleerd zijn (meestal reeds meegeïnstalleerd via Composer, zo niet:composer require yiisoft/yii2-redis
). Voor Memcached gebruik je doorgaansyiisoft/yii2-memcached
. In het basismodel zijn deze afhankelijkheden vaak al aanwezig.
Webserver configureren (ServBay Websites)
Stel met de “Websites”-functie van ServBay je lokale webserver (Caddy of Nginx) zo in dat deze je Yii 2-project bedient.
- Open ServBay: Start de ServBay-app.
- Navigeer naar websites: Zoek en klik in de interface op “Websites” of iets vergelijkbaars.
- Voeg een nieuwe website toe: Klik op de knop om een nieuwe website toe te voegen (vaak
+
ofToevoegen
). - Vul de websitegegevens in:
- Naam: Kies een herkenbare naam, bijvoorbeeld
Mijn eerste Yii 2 Dev Site
. - Domeinnaam: Voer het lokale domein in dat je wilt gebruiken, zoals
servbay-yii2-test.local
. ServBay regelt automatisch de lokale DNS naar127.0.0.1
. - Websitetype: Kies
PHP
. - PHP-versie: Kies de gewenste PHP-versie (bijvoorbeeld
8.3
). Controleer of deze geïnstalleerd en actief is in ServBay. - Website root directory: Let op: Voor het Yii 2 basistemplate is de publieke ingang het
web
-mapje in je project. Stel de root in op:/Applications/ServBay/www/servbay-yii2-app/web
.
- Naam: Kies een herkenbare naam, bijvoorbeeld
- Opslaan en toepassen: Sla je instellingen op. ServBay herlaadt automatisch de webserverconfiguratie.
Zie de officiële ServBay-documentatie voor gedetailleerde instructies: Je eerste website toevoegen.
ServBay genereert automatisch een vertrouwd SSL-certificaat (via ServBay User CA of ServBay Public CA) voor je lokale domein, zodat je je site veilig via HTTPS kunt benaderen.
Voorbeeldcode toevoegen om functionaliteit te demonstreren
Om het gebruik van database en cache te laten zien, voegen we een paar voorbeeldacties toe aan de standaardcontroller van Yii 2.
Bewerk het bestand controllers/SiteController.php
in de hoofdmap van je project en voeg de volgende methodes 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 database-excepties
class SiteController extends Controller
{
/**
* Geeft de homepage weer.
*
* @return string
*/
public function actionIndex()
{
return $this->render('index');
}
/**
* Demonstreert het gebruik van 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 bewaren
if ($cache->set($key, $data, $duration)) {
$value = $cache->get($key);
return $this->asText("Memcached succesvol ingesteld. Opgehaalde waarde: " . $value);
} else {
return $this->asText("Kon geen data opslaan in Memcached. Controleer de Memcached-service en configuratie.");
}
}
/**
* Demonstreert het gebruik van 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. Opgehaalde waarde: " . $value);
} else {
return $this->asText("Kon geen data opslaan in Redis. Controleer de Redis-service en configuratie.");
}
} catch (\yii\base\Exception $e) {
return $this->asText("Redis-fout: " . $e->getMessage() . ". Controleer de Redis-service en configuratie.");
}
}
/**
* Demotreert het toevoegen van een gebruiker aan de database.
* Vereist dat er een 'users'-tabel is.
*
* @return Response
*/
public function actionMysqlAdd() // Kan ook gebruikt worden voor PostgreSQL met juiste config
{
try {
$count = Yii::$app->db->createCommand()->insert('users', [
'name' => 'ServBay Demo User', // Merkgebonden voorbeeldnaam
'email' => '[email protected]', // Merkgebonden voorbeeldmail
])->execute();
return $this->asText("Gebruiker succesvol toegevoegd. Aantal rijen gewijzigd: " . $count);
} catch (DbException $e) {
return $this->asText("Kan geen gebruiker toevoegen aan de database. Fout: " . $e->getMessage() . ". Controleer de database, configuratie en of de 'users'-tabel bestaat.");
}
}
/**
* Demonstreert het ophalen van gebruikers uit de database.
* Vereist dat er een 'users'-tabel is.
*
* @return Response
*/
public function actionMysql() // Kan ook gebruikt worden voor PostgreSQL met juiste config
{
try {
$users = Yii::$app->db->createCommand('SELECT id, name, email FROM users')->queryAll();
// Formatteer de output, voorkom weergave van gevoelige info of onoverzichtelijke weergave
$output = "Opgehaalde gebruikers:\n";
foreach ($users as $user) {
$output .= "- ID: {$user['id']}, Naam: {$user['name']}, Email: {$user['email']}\n";
}
return $this->asText($output);
} catch (DbException $e) {
return $this->asText("Kan geen gebruikers ophalen uit de database. Fout: " . $e->getMessage() . ". Controleer de database, configuratie en of de 'users'-tabel bestaat.");
}
}
// Gebruik je PostgreSQL, dan kun je aparte actions toevoegen, maar doorgaans volstaat dezelfde db-component
// public function actionPgsqlAdd() { ... }
// public function actionPgsql() { ... }
/**
* Formatteert 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;
}
/**
* Formatteert 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 geoptimaliseerd voor leesbaarheid. Ook is de voorbeeldnaam en het e-mailadres aangepast naar een ServBay-voorbeeld.
Bewerk het bestand views/site/index.php
in de hoofdmap van het project. Dit is de bijbehorende view voor 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 je Yii2-applicatie aangemaakt en geconfigureerd met 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>Demo’s</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') ?>">Voeg een gebruiker toe 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 de door jou gekozen database (MySQL/PostgreSQL) draaien in ServBay en juist geconfigureerd zijn in `config/web.php` en `config/db.php`.</p>
<p>Voor databasevoorbeelden moet je eerst de 'users'-tabel aanmaken met 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
In de view zijn extra links opgenomen waarmee je de nieuwe controlleracties direct kunt uitproberen.
Relationele database: Tabelstructuur maken (Migratie)
Om de databasevoorbeelden (actionMysqlAdd
, actionMysql
) te laten werken, moet je de users
-tabel aanmaken. Yii raadt aan om dit via een migratie te doen.
Maak een migratiebestand: Open je terminal, zorg dat je in de hoofdmap
/Applications/ServBay/www/servbay-yii2-app
zit en draai het onderstaande commando om een nieuwe migratie aan te maken.bashphp yii migrate/create create_users_table
1Je wordt gevraagd om te bevestigen; toets
yes
in en druk op Enter. Hierdoor wordt er in de mapmigrations
een PHP-bestand aangemaakt met een naam alsmYYYYMMDD_HHMMSS_create_users_table.php
.Bewerk het migratiebestand: Open het zojuist aangemaakte bestand en omschrijf in de
up()
-methode de structuur van de tabelusers
.php<?php use yii\db\Migration; /** * Handelt het aanmaken van de tabel `{{%users}}` af. */ class mXXXXXXXXXXXXXX_create_users_table extends Migration // XXXXXXXXXXXXXX is de timestamp { /** * {@inheritdoc} */ public function up() { $this->createTable('{{%users}}', [ // Gebruik {{%users}} voor tabelprefix-ondersteuning '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 query-optimalisatie $this->createIndex( 'idx-users-email', '{{%users}}', 'email', true // true betekent unieke index ); } /** * {@inheritdoc} */ public function down() { // Index verwijderen $this->dropIndex( 'idx-users-email', '{{%users}}' ); // Tabel verwijderen $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_table
door de daadwerkelijke bestandsnaam.Voer de migratie uit: Controleer dat je je nog steeds in de hoofdmap van je project bevindt en draai het migratiecommando uit om de tabel aan te maken.
bashphp yii migrate
1Je wordt gevraagd om te bevestigen; toets
yes
in en druk op Enter. Bij succes zie je een bevestiging dat de migratie is uitgevoerd.
Website bezoeken en testen
Nu kun je de browser openen en het domein bezoeken dat je in ServBay hebt ingesteld: https://servbay-yii2-test.local
.
- Bezoek
https://servbay-yii2-test.local
: hier zie je het welkomstscherm van de Yii 2-basissjabloon en de demonstatielinks uitviews/site/index.php
. - Klik op "Test Memcached" of ga naar
https://servbay-yii2-test.local/index.php?r=site/memcached
: als Memcached draait en goed is geconfigureerd, zie je "Memcached succesvol ingesteld...". - Klik op "Test Redis" of bezoek
https://servbay-yii2-test.local/index.php?r=site/redis
: als Redis juist werkt zie je "Redis succesvol ingesteld...". - Klik op "Voeg een gebruiker toe aan DB" of ga naar
https://servbay-yii2-test.local/index.php?r=site/mysql-add
: als de database draait, goed is ingesteld en deusers
-tabel bestaat, verschijnt "Gebruiker succesvol toegevoegd...". Elke keer dat je deze link gebruikt, wordt geprobeerd een gebruiker toe te voegen (tenzij het e-mailadres al in de unieke index staat). - Klik op "Gebruikers ophalen uit DB" of ga naar
https://servbay-yii2-test.local/index.php?r=site/mysql
: als alles werkt verschijnt een lijst met opgehaalde gebruikers uit de tabelusers
.
Lukt iets niet? Controleer dan of alle benodigde services (PHP, webserver, database, Memcached, Redis) draaien in ServBay, of je configuratiebestanden (config/db.php
, config/web.php
) goed zijn ingevuld en of de databasetabel inderdaad succesvol is aangemaakt.
Veelgestelde Vragen (FAQ)
- Waarom krijg ik een foutmelding of certificaatwaarschuwing als ik het domein bezoek? Controleer of je het domein correct hebt toegevoegd in de ServBay Websitelist en dat de ServBay-app daadwerkelijk actief is. ServBay regelt DNS en SSL automatisch. Bij een certificaatwaarschuwing: controleer of je het ServBay User CA of ServBay Public CA vertrouwd hebt (zie de documentatie).
- Kan Composer niet gevonden worden? Controleer of Composer geactiveerd is in de ServBay-interface en zorg dat je in de terminal op macOS werkt. ServBay voegt Composer automatisch toe aan je PATH.
- Mislukte databaseverbinding? Controleer of de juiste database-service (MySQL/PostgreSQL) draait. Check de instellingen in
config/db.php
(dsn
,username
,password
) en of de databaseservbay_yii2_app
is aangemaakt. Gebruik Adminer om verbinding te testen. - Problemen met Memcached/Redis-verbinding? Kijk of de juiste cache-diensten in ServBay draaien. Controleer in
config/web.php
dehost
enport
voor Memcached/Redis (standaard127.0.0.1
en hun standaardpoorten). - Database-migratie (
php yii migrate
) werkt niet? Zorg dat jeconfig/db.php
correct is geconfigureerd, de database-service loopt en de database bestaat. Het migratiecommando vereist een werkende connectie. - Waarom geeft
actionMysqlAdd
ofactionMysql
aan dat de tabel niet bestaat? Je moet eerst het migratiecommando draaien om deusers
-tabel aan te maken:php yii migrate
. - Waar vind ik PHP-foutlogs? ServBay bundelt PHP-errorlogs, webserverlogs, enz. Je vindt ze in het “Logboeken”-gedeelte van de ServBay-app, handig voor foutopsporing.
Samenvatting
Met ServBay kun je eenvoudig een complete lokale ontwikkelomgeving op macOS opzetten en je Yii 2-project probleemloos draaien. Dankzij de ingebouwde Composer, PHP-versiebeheer, database- en cache-services en eenvoudige websitesconfiguratie, verlopen installatie en ontwikkeling van Yii 2-projecten veel sneller. Volg deze handleiding en start vliegensvlug je Yii 2-ontwikkeling – en haal het maximale uit de handige tools van ServBay.
Veel programmeerplezier!