Ein Yii 2 Projekt in ServBay erstellen und ausführen
Überblick: Was ist Yii 2?
Yii 2 ist ein leistungsstarkes, komponentenbasiertes PHP-Framework für die schnelle Entwicklung moderner Webanwendungen. Es folgt dem MVC-Designmuster (Model-View-Controller) und bietet eine umfassende Palette an Funktionen und Werkzeugen, die Entwicklern helfen, skalierbare und hochwertige Webanwendungen effizient zu erstellen. Yii 2 ist dank seiner hohen Performance, flexiblen Architektur und vielseitigen eingebauten Features (wie Caching, Sicherheit, Unterstützung für RESTful APIs usw.) weit verbreitet und beliebt.
Die wichtigsten Merkmale und Vorteile von Yii 2
- Hohe Performance: Yii 2 ist gezielt optimiert und kann auch hohe Anfragezahlen zuverlässig verarbeiten – ideal für performancekritische Anwendungen.
- Modularität: Die Architektur ist hochgradig modular aufgebaut, was die Organisation und Wiederverwendbarkeit des Codes erleichtert.
- Sicherheit: Das Framework verfügt über eingebaute Sicherheitsfeatures wie Eingabevalidierung, Output-Filter, CSRF/XSS-Schutz und ein flexibles Authentifizierungs- und Autorisierungssystem.
- Benutzerfreundlichkeit: Die API ist klar und intuitiv gestaltet, die Dokumentation ist umfassend – dies sorgt für eine niedrige Einstiegshürde und schnelles Erlernen.
- Starke Community: Es gibt eine aktive Entwicklergemeinschaft und eine große Auswahl an Drittanbieter-Erweiterungen, sodass Hilfe und Lösungen leicht zugänglich sind.
- Integrierte Tools: Praktische Kommandozeilen-Werkzeuge beschleunigen Aufgaben wie Datenbankmigrationen und Code-Generierung.
Yii 2 eignet sich ideal für verschiedenste Webprojekte: von Enterprise-Anwendungen über RESTful APIs bis hin zu Portalen und klassischen Webseiten.
Yii 2 Projekt mit ServBay betreiben
ServBay ist eine lokale Webentwicklungsumgebung für macOS und Windows, die alles mitbringt, was Entwickler benötigen: PHP in vielen Varianten, Datenbanken (MySQL, PostgreSQL, MongoDB, Redis), Webserver (Caddy, Nginx) sowie zahlreiche Tools (Composer, Node.js, Python, Go, Java u.v.m.). Der Fokus liegt auf "Ready-to-use" Komfort, sodass Sie direkt loslegen können.
In dieser Anleitung erfahren Sie, wie Sie mit ServBay ein Basisprojekt auf Yii 2-Basis aufsetzen. Sie nutzen ServBays PHP-Umgebung, Composer und Datenbankdienste, richten Ihre lokale Website ein und können die Grundfunktionen des Frameworks demonstrieren.
Voraussetzungen
Bevor Sie beginnen:
- ServBay ist erfolgreich auf Ihrem macOS- oder Windows-System installiert und läuft.
- Die benötigte PHP-Version (z. B. PHP 8.3 oder neuer) ist in ServBay installiert und aktiviert.
- Die Datenbankdienste (MySQL oder PostgreSQL) sowie die Caching-Dienste (Memcached, Redis) sind in ServBay installiert und aktiviert.
Installierte Komponenten und deren Status können Sie direkt im ServBay-Hauptfenster einsehen und verwalten.
Yii 2 Projekt erstellen
TIP
ServBay empfiehlt, Ihre Projektdateien an folgendem Speicherort abzulegen, damit Verzeichnisstruktur und Website-Management übersichtlich bleiben:
- macOS:
/Applications/ServBay/www
- Windows:
C:\ServBay\www
Composer: ServBay hat Composer bereits integriert. Sie müssen Composer nicht extra installieren – verwenden Sie im Terminal einfach den Befehl
composer
.Projektverzeichnis erstellen: Öffnen Sie das Terminal, wechseln Sie ins Standard-Webverzeichnis von ServBay und richten Sie dort Ihr neues Projekt ein.
macOS:
bashcd /Applications/ServBay/www mkdir servbay-yii2-app cd servbay-yii2-app
1
2
3Windows:
cmdcd C:\ServBay\www mkdir servbay-yii2-app cd servbay-yii2-app
1
2
3Yii 2 Projekt mit Composer anlegen: Im Verzeichnis
servbay-yii2-app
starten Sie Composer, um das Basis-Template für Yii 2 und die Abhängigkeiten zu installieren.bashcomposer create-project --prefer-dist yiisoft/yii2-app-basic .
1Der Befehl lädt und installiert das Yii 2 Basis-Template samt aller Dependencies ins aktuelle Verzeichnis (
.
). Warten Sie, bis Composer die Installation abgeschlossen hat.Ins Projektverzeichnis wechseln: Vergewissern Sie sich, dass Sie sich im Terminal im Projekt-Stammverzeichnis befinden. Alle weiteren Befehle laufen dort ab.
macOS:
bashcd /Applications/ServBay/www/servbay-yii2-app
1Windows:
cmdcd C:\ServBay\www\servbay-yii2-app
1
Grundkonfiguration
Nach dem Anlegen des Yii 2 Projekts steht die Basiskonfiguration an – insbesondere die Datenbankverbindung und die Komponenten-Konfiguration.
Datenbankverbindung konfigurieren: Bearbeiten Sie die Datei
config/db.php
im Projektstamm. Passen Sie die Zugangsdaten für Ihre Datenbank aus ServBay an (MySQL oder PostgreSQL, Standardbenutzer meistroot
, Passwort oftpassword
, sofern nicht anders eingerichtet).Legen Sie zuerst in der ServBay-Datenbank ein eigenes Datenbank-Schema für das Projekt an, z. B.
servbay_yii2_app
. Nutzen Sie dazu den integrierten Adminer oder Ihr bevorzugtes DB-Tool (Sequel Ace, TablePlus usw.). Adminer ist direkt über ServBays Datenbankbereich erreichbar.Für MySQL:
php<?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=127.0.0.1;dbname=servbay_yii2_app', // dbname entspricht dem zuvor angelegten Schema 'username' => 'root', // Ihr Datenbank-Benutzername 'password' => 'password', // Ihr Datenbank-Passwort 'charset' => 'utf8mb4', // Empfohlen für erweiterte Zeichensatz-Unterstützung ];
1
2
3
4
5
6
7
8
9Für PostgreSQL:
php<?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'pgsql:host=127.0.0.1;port=5432;dbname=servbay_yii2_app', // dbname entsprechend eigener Datenbank, port meist 5432 'username' => 'root', // Ihr Datenbank-Benutzername 'password' => 'password', // Ihr Datenbank-Passwort 'charset' => 'utf8', 'schemaMap' => [ 'pgsql' => [ 'class' => 'yii\pgsql\Schema', 'defaultSchema' => 'public', // Standard-Schema bei PostgreSQL ], ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Passen Sie die Datei
config/db.php
Ihrer Umgebung entsprechend an.Cache und Redis Komponenten konfigurieren: Öffnen Sie
config/web.php
im Projektstamm. Ergänzen oder ändern Sie den Blockcomponents
für Memcached und Redis. Der Standardport für Memcached ist11211
, für Redis6379
.php<?php // ... weitere Einstellungen 'components' => [ // ... bestehende Komponenten (wie request, cache, user, errorHandler, log, urlManager) 'cache' => [ 'class' => 'yii\caching\MemCache', 'servers' => [ [ 'host' => '127.0.0.1', 'port' => 11211, // Standardport für Memcached 'weight' => 100, ], ], ], 'redis' => [ 'class' => 'yii\redis\Connection', 'hostname' => '127.0.0.1', 'port' => 6379, // Standardport für Redis 'database' => 0, // Redis-Indizes starten bei 0 ], // ... weitere Komponenten ], // ... weitere Einstellungen
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
28Stellen Sie sicher, dass die Memcached- und Redis-Dienste in ServBay gestartet sind. Beachten Sie: Zur Nutzung von Redis als Cache benötigen Sie das Package
yiisoft/yii2-redis
(Composer installiert die Hauptabhängigkeiten mitcreate-project
, weitere ggf. händisch viacomposer require yiisoft/yii2-redis
). Für Memcached meistyiisoft/yii2-memcached
.
Webserver konfigurieren (ServBay Website)
Nutzen Sie das „Website“-Feature von ServBay, um den lokalen Webserver (Caddy oder Nginx) für Ihr Yii 2 Projekt einzurichten.
- ServBay öffnen: Starten Sie die ServBay-App.
- Zum Website-Setup navigieren: In der Oberfläche finden Sie den Menüpunkt "Website" oder ähnlich.
- Neue Website hinzufügen: Klicken Sie auf das Symbol zum Hinzufügen (oft
+
oder „Hinzufügen“). - Website-Daten eintragen:
- Name: Wählen Sie einen klaren Namen, z. B.
My First Yii 2 Dev Site
. - Domain: Tragen Sie die gewünschte lokale Domain ein, z. B.
servbay-yii2-test.local
. ServBay konfiguriert DNS automatisch auf127.0.0.1
. - Website-Typ: Wählen Sie
PHP
. - PHP-Version: Wählen Sie Ihre gewünschte Version (z. B.
8.3
). Sie muss installiert und aktiviert sein. - Webroot: Sehr wichtig! Beim Basis-Template von Yii 2 liegt der öffentliche Einstiegspunkt im Unterverzeichnis
web
Ihres Projektes. Die Webroot ist also:- macOS:
/Applications/ServBay/www/servbay-yii2-app/web
- Windows:
C:\ServBay\www\servbay-yii2-app\web
- macOS:
- Name: Wählen Sie einen klaren Namen, z. B.
- Speichern und anwenden: Nach dem Speichern übernimmt ServBay die neuen Einstellungen automatisch.
Alle Details zum Website-Setup finden Sie im ServBay-Handbuch: Erste Website hinzufügen.
ServBay stellt für Ihre lokale Domain automatisch ein SSL-Zertifikat aus (über ServBay User CA oder ServBay Public CA). Ihr Projekt ist daher per HTTPS erreichbar.
Beispiel-Code für Demonstrationen
Zum Testen von Datenbank und Cache können Sie neue Methoden im default Controller von Yii 2 hinzufügen.
Öffnen Sie controllers/SiteController.php
und ergänzen folgendes in die Klasse SiteController
:
php
<?php
namespace app\controllers;
use Yii;
use yii\web\Controller;
use yii\web\Response;
use yii\db\Exception as DbException; // Datenbank-Ausnahme einbinden
class SiteController extends Controller
{
/**
* Zeigt die Startseite.
*
* @return string
*/
public function actionIndex()
{
return $this->render('index');
}
/**
* Demonstriert Memcached-Nutzung.
*
* @return Response
*/
public function actionMemcached()
{
$cache = Yii::$app->cache;
$key = 'my_memcached_test_key';
$data = 'Hello Memcached from ServBay!';
$duration = 60; // Cache für 60 Sekunden
if ($cache->set($key, $data, $duration)) {
$value = $cache->get($key);
return $this->asText("Memcached erfolgreich gesetzt. Wert abgerufen: " . $value);
} else {
return $this->asText("Daten konnten nicht in Memcached gespeichert werden. Bitte Memcached-Dienst und Konfiguration prüfen.");
}
}
/**
* Demonstriert Redis-Nutzung.
*
* @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 erfolgreich gesetzt. Wert abgerufen: " . $value);
} else {
return $this->asText("Daten konnten nicht in Redis gespeichert werden. Bitte Redis-Dienst und Konfiguration prüfen.");
}
} catch (\yii\base\Exception $e) {
return $this->asText("Redis-Fehler: " . $e->getMessage() . ". Bitte Redis-Dienst und Konfiguration prüfen.");
}
}
/**
* Fügt einen Nutzer zur Datenbank hinzu.
* Erfordert bestehende 'users'-Tabelle.
*
* @return Response
*/
public function actionMysqlAdd() // Funktioniert auch für PostgreSQL mit korrekter Einstellung
{
try {
$count = Yii::$app->db->createCommand()->insert('users', [
'name' => 'ServBay Demo User', // Beispielname passend zum Markennamen
'email' => 'demo-user@servbay.test', // Beispiel-E-Mail passend zum Markennamen
])->execute();
return $this->asText("Nutzer erfolgreich hinzugefügt. Betroffene Zeilen: " . $count);
} catch (DbException $e) {
return $this->asText("Fehler beim Hinzufügen des Nutzers zur Datenbank: " . $e->getMessage() . ". Bitte Datenbankdienst und Konfiguration prüfen sowie sicherstellen, dass die 'users'-Tabelle existiert.");
}
}
/**
* Ruft Nutzer aus der Datenbank ab.
* Erfordert bestehende 'users'-Tabelle.
*
* @return Response
*/
public function actionMysql() // Funktioniert auch für PostgreSQL mit korrekter Einstellung
{
try {
$users = Yii::$app->db->createCommand('SELECT id, name, email FROM users')->queryAll();
// Formatierte Ausgabe, um Lesbarkeit und Datenschutz zu gewährleisten
$output = "Abgerufene Nutzer:\n";
foreach ($users as $user) {
$output .= "- ID: {$user['id']}, Name: {$user['name']}, E-Mail: {$user['email']}\n";
}
return $this->asText($output);
} catch (DbException $e) {
return $this->asText("Fehler beim Abrufen der Nutzer aus der Datenbank: " . $e->getMessage() . ". Bitte Datenbankdienst und Konfiguration prüfen sowie sicherstellen, dass die 'users'-Tabelle existiert.");
}
}
// Für PostgreSQL können separate Methoden angelegt werden, meist reicht die gemeinsame db-Komponente.
// public function actionPgsqlAdd() { ... }
// public function actionPgsql() { ... }
/**
* Gibt die Ausgabe als Klartext zurück.
* @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;
}
/**
* Gibt die Ausgabe als JSON zurück.
* @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
Im Beispiel sind Fehlerbehandlung und die Ausgabe in den Methoden actionMysqlAdd
und actionMysql
bereits integriert. Das Demo-User-Setup ist ServBay-bezogen.
Als nächstes bearbeiten Sie views/site/index.php
. Dies ist die zugehörige View zur Methode actionIndex
. Sie können den Standardinhalt unverändert lassen oder anpassen:
php
<?php
/* @var $this yii\web\View */
/* @var $name string */
/* @var $message string */
/* @var $exception Exception */
use yii\helpers\Html;
$this->title = 'My Yii2 Application on ServBay'; // Titel aktualisieren
?>
<div class="site-index">
<div class="jumbotron">
<h1>Congratulations!</h1>
<p class="lead">Sie haben Ihre Yii2-Anwendung erfolgreich erstellt und in ServBay konfiguriert!</p>
<p><a class="btn btn-lg btn-success" href="https://www.yiiframework.com">Jetzt mit Yii starten</a></p>
</div>
<div class="body-content">
<h2>Demonstrationen</h2>
<ul>
<li><a href="<?= Html::toRoute('site/memcached') ?>">Memcached testen</a></li>
<li><a href="<?= Html::toRoute('site/redis') ?>">Redis testen</a></li>
<li><a href="<?= Html::toRoute('site/mysql-add') ?>">Benutzer in die DB einfügen</a> (Erfordert 'users'-Tabelle)</li>
<li><a href="<?= Html::toRoute('site/mysql') ?>">Benutzer aus DB abfragen</a> (Erfordert 'users'-Tabelle)</li>
</ul>
<p>Bitte stellen Sie sicher, dass Memcached, Redis und Ihre Datenbankdienste (MySQL/PostgreSQL) in ServBay laufen und in `config/web.php` sowie `config/db.php` korrekt konfiguriert sind.</p>
<p>Für die Datenbank-Beispiele muss die 'users'-Tabelle via Migration angelegt werden (siehe unten).</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
Die Links zum Testen der neuen Routings sind bereits integriert.
Relationale Datenbank: Tabelle anlegen (Migration)
Um die Datenbankbeispiele (actionMysqlAdd
, actionMysql
) ausführen zu können, muss die Tabelle users
existieren. Yii empfiehlt, das Schema mit Migrationen zu verwalten.
Migration (Gii Tool) anlegen: Im Terminal (im Projektstamm) erstellen Sie per Yii-Kommando eine neue Migration.
Projektverzeichnis:
- macOS:
/Applications/ServBay/www/servbay-yii2-app
- Windows:
C:\ServBay\www\servbay-yii2-app
bashphp yii migrate/create create_users_table
1Nach "yes" wird eine Datei im Verzeichnis
migrations
erzeugt, z. B.mYYYYMMDD_HHMMSS_create_users_table.php
.- macOS:
Migration bearbeiten: Öffnen Sie die eben angelegte Datei und definieren Sie die Struktur im
up()
-Block.php<?php use yii\db\Migration; /** * Erstellt die Tabelle `{{%users}}`. */ class mXXXXXXXXXXXXXX_create_users_table extends Migration // XXXXXXXXXXXXXX steht für den Zeitstempel { /** * {@inheritdoc} */ public function up() { $this->createTable('{{%users}}', [ // Mit {{%users}} zur Unterstützung von Tabellenvorsilben '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'), ]); // Optional: Index für bessere Performance $this->createIndex( 'idx-users-email', '{{%users}}', 'email', true // true für Unique-Index ); } /** * {@inheritdoc} */ public function down() { // Index löschen $this->dropIndex( 'idx-users-email', '{{%users}}' ); // Tabelle löschen $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
46Passen Sie
mXXXXXXXXXXXXXX_create_users_table
auf Ihren echten Dateinamen an.Migration ausführen: Im Projektverzeichnis führen Sie die Migration aus – die Nutzertabelle wird wie in
up()
angelegt:bashphp yii migrate
1Bestätigen Sie mit "yes". Bei Erfolg erscheint eine Meldung zur erfolgreichen Tabellenanlage.
Website aufrufen und testen
Jetzt können Sie Ihren Browser öffnen und die konfigurierte Domain https://servbay-yii2-test.local
aufrufen.
- Ist ServBay korrekt konfiguriert: Sehen Sie die Yii 2 Willkommensseite samt Demo-Links aus
views/site/index.php
. - "Memcached testen" (
https://servbay-yii2-test.local/index.php?r=site/memcached
): Bei funktionierender Memcached-Konfiguration erscheint "Memcached erfolgreich gesetzt...". - "Redis testen" (
https://servbay-yii2-test.local/index.php?r=site/redis
): Wie oben, mit Redis-Ausgabe. - "Benutzer in die DB einfügen" (
https://servbay-yii2-test.local/index.php?r=site/mysql-add
): Bei funktionierender Datenbank und angelegter Nutzertabelle erscheint "Nutzer erfolgreich hinzugefügt...". Jeder Aufruf fügt einen neuen Demo-Nutzer hinzu (sofern die E-Mail noch nicht vergeben ist). - "Benutzer aus DB abfragen" (
https://servbay-yii2-test.local/index.php?r=site/mysql
): Gibt die Nutzerliste aus Tabelleusers
zurück.
Bei Problemen prüfen Sie, ob die Dienste in ServBay laufen (PHP, Webserver, DB, Memcached, Redis), Ihre Yii 2-Konfiguration (config/db.php
, config/web.php
) stimmt und die Nutzertabelle angelegt ist.
FAQ – Häufige Fragen
- Domain nicht erreichbar oder Zertifikatsfehler? Prüfen Sie, ob die Domain korrekt im Website-Setup eingetragen ist und die ServBay-App läuft. ServBay richtet DNS und SSL selbst ein. Bei Zertifikatsfehlern muss das ServBay-CA-Zertifikat in Ihrem System als vertrauenswürdig gelten (siehe ServBay-Doku).
- Composer-Befehl klappt nicht? Stellen Sie sicher, dass Composer in ServBay aktiviert ist – und dass Sie im richtigen Terminal arbeiten. ServBay aktualisiert Ihre PATH-Variable automatisch.
- Fehler bei Datenbankverbindung? Prüfen Sie, ob der Datenbankdienst (MySQL/PostgreSQL) läuft und die Konfiguration (DSN, Nutzer, Passwort) in
config/db.php
korrekt ist. Die Datenbankservbay_yii2_app
muss existieren. Mit Adminer können Sie die Verbindung testen. - Memcached/Redis-Verbindung funktioniert nicht? Ist der entsprechende Dienst in ServBay aktiviert? Stimmt die Konfiguration (
host
,port
) inconfig/web.php
? - Migration (
php yii migrate
) schlägt fehl? Die Datenbankverbindung muss stimmen und die Datenbank angelegt sein. - "Tabelle fehlt"-Fehler bei
actionMysqlAdd
/actionMysql
? Führen Sie die Migration aus:php yii migrate
. - Wo finde ich PHP-Fehler-Logs? ServBay bündelt alle Logs. Im Log-Bereich der ServBay-App sind PHP- und Webserver-Logs einsehbar und helfen beim Diagnostizieren.
Zusammenfassung
Mit ServBay richten Sie unter macOS oder Windows schnell und einfach eine komplette lokale Entwicklungsumgebung für Ihr Yii 2 Projekt ein. Composer, PHP-Versionen, Datenbank- und Cache-Dienste sowie das unkomplizierte Website-Setup beschleunigen Einrichtung und Workflow enorm. Folgen Sie dieser Anleitung, so starten Sie rasch in Ihre Yii 2 Entwicklung – und profitieren von ServBays Tools für maximale Effizienz.
Viel Erfolg bei der Entwicklung!