Erstellen und Ausführen eines Zend Framework Projekts
Was ist Zend Framework?
Zend Framework ist ein Open-Source-PHP-Framework, das eine Sammlung objektorientierter Bibliotheken für den Aufbau moderner Webanwendungen und -dienste bietet. Es zeichnet sich durch Modularität und hohe Leistung aus, was es für die Erstellung von kleinen bis großen Unternehmensanwendungen geeignet macht.
Hauptmerkmale und Vorteile von Zend Framework
- Modularität: Zend Framework verwendet ein modulares Design, das Entwicklern ermöglicht, Komponenten nach Bedarf zu wählen und zu nutzen.
- Hohe Leistung: Durch eine optimierte Architektur und Caching-Mechanismen bietet Zend Framework eine hervorragende Leistung.
- Flexibilität: Es kann mit verschiedenen Drittanbieterbibliotheken und -erweiterungen integriert werden, was es für Projekte jeder Größe geeignet macht.
- Community-Unterstützung: Eine große Entwicklercommunity und ein reichhaltiges Ökosystem stehen zur Verfügung.
- Gute Dokumentation: Es gibt umfangreiche Dokumentationen und Tutorials, die Entwicklern den Einstieg erleichtern.
Zend Framework eignet sich für den Aufbau hochwertiger Webanwendungen und APIs, von kleinen Anwendungen bis hin zu großen Unternehmenssystemen.
Ein Zend Framework Projekt mit ServBay erstellen und ausführen
In diesem Artikel verwenden wir die von ServBay bereitgestellte PHP-Umgebung, um ein Zend Framework Projekt zu erstellen und auszuführen. Wir nutzen die ‚Host‘-Funktion von ServBay, um den Webserver einzurichten und den Zugriff auf das Projekt durch einfache Konfiguration zu ermöglichen.
Hinweis: Wenn Sie früher NGINX- oder Apache-Benutzer waren
ServBay verwendet standardmäßig Caddy als Webserver. Für Benutzer, die von NGINX und Apache zu ServBay wechseln, gibt es einige wichtige Änderungen zu beachten:
Caddy-Konfiguration
ServBay hat Caddy eingebaut, und die Standardkonfiguration ist bereits optimiert und getestet. Entwickler müssen die Caddy-Konfigurationsdatei nicht manuell ändern, sondern können die Verwaltung der Webseiten über die ‚Host‘-Funktion von ServBay vornehmen.
Rewrite-Regeln und .htaccess
In NGINX und Apache müssen Entwickler häufig eigene Rewrite-Regeln und .htaccess-Dateien schreiben, um URL-Weiterleitungen und andere Konfigurationen zu handhaben. Bei ServBay sind jedoch Caddy-Regeln vorkonfiguriert, sodass Entwickler diese Regeln nicht selbst schreiben müssen, es sei denn, es besteht ein spezieller Bedarf.
Mehr erfahren
Weitere Informationen finden Sie unter Rewrite und htaccess, Websites von Apache zu ServBay migrieren, Websites von NGINX zu ServBay migrieren.
Zend Framework Projekt erstellen
TIP
ServBay empfiehlt Entwicklern, die Webseiten im Verzeichnis /Applications/ServBay/www
abzulegen, um die Verwaltung zu erleichtern.
Composer installieren
Composer ist bei der Auslieferung von ServBay bereits vorinstalliert und muss nicht separat installiert werden.
Neues Zend Framework Projekt erstellen
Mit Composer ein neues Zend Framework Projekt erstellen:
bashcd /Applications/ServBay/www mkdir servbay-zend-app cd servbay-zend-app composer create-project zendframework/skeleton-application .
1
2
3
4In das Projektverzeichnis wechseln
Wechseln Sie in das neu erstellte Zend Framework Projektverzeichnis:
bashcd /Applications/ServBay/www/servbay-zend-app
1
Initiale Konfiguration
Umgebungsvariablen konfigurieren
In der Datei
config/autoload/global.php
die Datenbankverbindungsinformationen und andere Umgebungsvariablen konfigurieren. Stellen Sie sicher, dass die folgenden Konfigurationen korrekt eingestellt sind:phpreturn [ 'db' => [ 'driver' => 'Pdo_Mysql', 'database' => 'servbay_zend_app', 'username' => 'root', 'password' => 'password', 'hostname' => '127.0.0.1', ], ];
1
2
3
4
5
6
7
8
9
Webserver Konfiguration
Verwenden Sie die ‚Host‘-Funktion von ServBay, um über den Webserver auf das Zend Framework Projekt zuzugreifen. Fügen Sie in den ‚Host‘-Einstellungen von ServBay einen neuen Host hinzu:
- Name:
My First Zend Dev Site
- Domain:
servbay-zend-test.local
- Webseitentyp:
PHP
- PHP Version:
8.3
- Webseiten-Root-Verzeichnis:
/Applications/ServBay/www/servbay-zend-app/public
Detaillierte Anweisungen finden Sie unter Erste Website hinzufügen.
Beispielcode hinzufügen
In der Datei module/Application/config/module.config.php
den folgenden Code hinzufügen, um "Hello ServBay!" auszugeben:
return [
'router' => [
'routes' => [
'home' => [
'type' => 'Literal',
'options' => [
'route' => '/',
'defaults' => [
'controller' => 'Application\Controller\Index',
'action' => 'index',
],
],
],
],
],
'controllers' => [
'factories' => [
'Application\Controller\Index' => InvokableFactory::class,
],
],
'view_manager' => [
'template_path_stack' => [
__DIR__ . '/../view',
],
],
];
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
In der Datei module/Application/src/Controller/IndexController.php
den folgenden Code hinzufügen:
namespace Application\Controller;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\View\Model\ViewModel;
class IndexController extends AbstractActionController
{
public function indexAction()
{
return new ViewModel([
'message' => 'Hello ServBay!',
]);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
In der Datei module/Application/view/application/index/index.phtml
den folgenden Code hinzufügen:
<?php echo $this->message; ?>
Website aufrufen
Öffnen Sie den Browser und besuchen Sie https://servbay-zend-test.local
, Sie werden die Nachricht Hello ServBay!
auf der Webseite sehen.
NoSQL Datenbank Beispiel
Memcached Beispiel
Memcached Erweiterung installieren
In ServBay ist die Memcached-Erweiterung bereits vorinstalliert, es ist keine zusätzliche Installation erforderlich.
Memcached Konfiguration
In der Datei
composer.json
die Memcached Abhängigkeit hinzufügen:json{ "require": { "laminas/laminas-cache-storage-adapter-memcached": "^2.0" } }
1
2
3
4
5Dann
composer update
ausführen, um die Abhängigkeiten zu installieren.Route konfigurieren
In der Datei
module/Application/config/module.config.php
den folgenden Code hinzufügen:phpreturn [ 'router' => [ 'routes' => [ 'memcached' => [ 'type' => 'Literal', 'options' => [ 'route' => '/memcached', 'defaults' => [ 'controller' => 'Application\Controller\Index', 'action' => 'memcached', ], ], ], ], ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16Memcached verwenden
Im Controller den Cache verwenden:
phpnamespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; use Laminas\Cache\StorageFactory; class IndexController extends AbstractActionController { public function memcachedAction() { $cache = StorageFactory::factory([ 'adapter' => [ 'name' => 'memcached', 'options' => [ 'servers' => [ ['127.0.0.1', 11211], ], ], ], ]); $cacheKey = 'my_cache_key'; $cachedData = $cache->getItem($cacheKey, $success); if (!$success) { $cachedData = 'Hello Memcached!'; $cache->setItem($cacheKey, $cachedData); } return new ViewModel([ 'message' => $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
34In der Datei
module/Application/view/application/index/memcached.phtml
den folgenden Code hinzufügen:php<?php echo $this->message; ?>
1Öffnen Sie den Browser und besuchen Sie
https://servbay-zend-test.local/memcached
Redis Beispiel
Redis Erweiterung installieren
In ServBay ist die Redis-Erweiterung bereits vorinstalliert, es ist keine zusätzliche Installation erforderlich.
Redis Konfiguration
In der Datei
composer.json
die Redis Abhängigkeit hinzufügen:json{ "require": { "laminas/laminas-cache-storage-adapter-redis": "^2.0" } }
1
2
3
4
5Dann
composer update
ausführen, um die Abhängigkeiten zu installieren.Route konfigurieren
In der Datei
module/Application/config/module.config.php
den folgenden Code hinzufügen:phpreturn [ 'router' => [ 'routes' => [ 'redis' => [ 'type' => 'Literal', 'options' => [ 'route' => '/redis', 'defaults' => [ 'controller' => 'Application\Controller\Index', 'action' => 'redis', ], ], ], ], ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16Redis verwenden
Im Controller den Cache verwenden:
phpnamespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; use Laminas\Cache\StorageFactory; class IndexController extends AbstractActionController { public function redisAction() { $cache = StorageFactory::factory([ 'adapter' => [ 'name' => 'redis', 'options' => [ 'server' => [ 'host' => '127.0.0.1', 'port' => 6379, ], ], ], ]); $cacheKey = 'my_cache_key'; $cachedData = $cache->getItem($cacheKey, $success); if (!$success) { $cachedData = 'Hello Redis!'; $cache->setItem($cacheKey, $cachedData); } return new ViewModel([ 'message' => $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
35In der Datei
module/Application/view/application/index/redis.phtml
den folgenden Code hinzufügen:php<?php echo $this->message; ?>
1Öffnen Sie den Browser und besuchen Sie
https://servbay-zend-test.local/redis
Relationale Datenbank Beispiele
Datenbankstruktur und Migrationsdateien erstellen
Migrationsdatei erstellen
Mit dem Migrationswerkzeug von Laminas eine Migrationsdatei erstellen:
bashcomposer require laminas/laminas-db
1Migrationsdatei bearbeiten
Im Verzeichnis
data/migrations
eine neue Migrationsdatei erstellen und bearbeiten, um die Datenbanktabellenstruktur zu definieren:phpuse Laminas\Db\Adapter\Adapter; use Laminas\Db\Sql\Sql; class CreateUsersTable { public function up(Adapter $adapter) { $sql = new Sql($adapter); $create = $sql->createTable('users') ->addColumn('id', 'integer', ['auto_increment' => true]) ->addColumn('name', 'varchar', ['length' => 255]) ->addColumn('email', 'varchar', ['length' => 255, 'unique' => true]) ->addPrimaryKey('id'); $adapter->query( $sql->buildSqlString($create), Adapter::QUERY_MODE_EXECUTE ); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20Migration ausführen
Manuell die Migration ausführen und die Datenbanktabelle erstellen:
php$adapter = new Adapter([ 'driver' => 'Pdo_Mysql', 'database' => 'servbay_zend_app', 'username' => 'root', 'password' => 'password', 'hostname' => '127.0.0.1', ]); $migration = new CreateUsersTable(); $migration->up($adapter);
1
2
3
4
5
6
7
8
9
10
MySQL Beispiel
MySQL konfigurieren
In der Datei
config/autoload/global.php
die MySQL-Verbindungsinformationen konfigurieren:phpreturn [ 'db' => [ 'driver' => 'Pdo_Mysql', 'database' => 'servbay_zend_app', 'username' => 'root', 'password' => 'password', 'hostname' => '127.0.0.1', ], ];
1
2
3
4
5
6
7
8
9Route konfigurieren
In der Datei
module/Application/config/module.config.php
den folgenden Code hinzufügen:phpreturn [ 'router' => [ 'routes' => [ 'mysql-add' => [ 'type' => 'Literal', 'options' => [ 'route' => '/mysql-add', 'defaults' => [ 'controller' => 'Application\Controller\Index', 'action' => 'mysqlAdd', ], ], ], 'mysql' => [ 'type' => 'Literal', 'options' => [ 'route' => '/mysql', 'defaults' => [ 'controller' => 'Application\Controller\Index', 'action' => 'mysql', ], ], ], ], ], ];
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
26Benutzerdaten hinzufügen
Im Controller Benutzerdaten hinzufügen:
phpnamespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; use Laminas\Db\Adapter\Adapter; use Laminas\Db\Sql\Sql; class IndexController extends AbstractActionController { protected $adapter; public function __construct(Adapter $adapter) { $this->adapter = $adapter; } public function mysqlAddAction() { $sql = new Sql($this->adapter); $insert = $sql->insert('users') ->values([ 'name' => 'ServBay', 'email' => '[email protected]', ]); $this->adapter->query( $sql->buildSqlString($insert), Adapter::QUERY_MODE_EXECUTE ); return new ViewModel([ 'message' => 'User added', ]); } public function mysqlAction() { $sql = new Sql($this->adapter); $select = $sql->select('users'); $result = $this->adapter->query( $sql->buildSqlString($select), Adapter::QUERY_MODE_EXECUTE ); $users = []; foreach ($result als $row) { $users[] = $row; } return new ViewModel([ 'users' => 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
55In der Datei
module/Application/view/application/index/mysql-add.phtml
den folgenden Code hinzufügen:php<?php echo $this->message; ?>
1In der Datei
module/Application/view/application/index/mysql.phtml
den folgenden Code hinzufügen:php<?php echo $this->users; ?>
1Öffnen Sie den Browser und besuchen Sie
https://servbay-zend-test.local/mysql-add
undhttps://servbay-zend-test.local/mysql
PostgreSQL Beispiel
PostgreSQL konfigurieren
In der Datei
config/autoload/global.php
die PostgreSQL-Verbindungsinformationen konfigurieren:phpreturn [ 'db' => [ 'driver' => 'Pdo_Pgsql', 'database' => 'servbay_zend_app', 'username' => 'root', 'password' => 'password', 'hostname' => '127.0.0.1', ], ];
1
2
3
4
5
6
7
8
9Route konfigurieren
In der Datei
module/Application/config/module.config.php
den folgenden Code hinzufügen:phpreturn [ 'router' => [ 'routes' => [ 'pgsql-add' => [ 'type' => 'Literal', 'options' => [ 'route' => '/pgsql-add', 'defaults' => [ 'controller' => 'Application\Controller\Index', 'action' => 'pgsqlAdd', ], ], ], 'pgsql' => [ 'type' => 'Literal', 'options' => [ 'route' => '/pgsql', 'defaults' => [ 'controller' => 'Application\Controller\Index', 'action' => 'pgsql', ], ], ], ], ], ];
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
26Benutzerdaten hinzufügen
Im Controller Benutzerdaten hinzufügen:
phpnamespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; use Laminas\Db\Adapter\Adapter; use Laminas\Db\Sql\Sql; class IndexController extends AbstractActionController { protected $adapter; public function __construct(Adapter $adapter) { $this->adapter = $adapter; } public function pgsqlAddAction() { $sql = new Sql($this->adapter); $insert = $sql->insert('users') ->values([ 'name' => 'ServBay', 'email' => '[email protected]', ]); $this->adapter->query( $sql->buildSqlString($insert), Adapter::QUERY_MODE_EXECUTE ); return new ViewModel([ 'message' => 'User added', ]); } public function pgsqlAction() { $sql = neue Sql($this->adapter); $select = $sql->select('users'); $result = $this->adapter->query( $sql->buildSqlString($select), Adapter::QUERY_MODE_EXECUTE ); $users = []; foreach ($result als $row) { $users[] = $row; } return new ViewModel([ 'users' => 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