创建并运行 Zend Framework 项目
什么是 Zend Framework?
Zend Framework 是一个开源的 PHP 框架,提供了一组面向对象的库,用于构建现代 Web 应用程序和服务。它以模块化和高性能著称,适合构建从小型到大型的企业级应用程序。
Zend Framework 的主要特性和优势
- 模块化设计:Zend Framework 采用模块化设计,允许开发者根据需要选择和使用组件。
- 高性能:通过优化的架构和缓存机制,Zend Framework 提供了出色的性能表现。
- 灵活性:可以集成多种第三方库和扩展,适用于各种规模的项目。
- 社区支持:拥有庞大的开发者社区和丰富的生态系统。
- 良好的文档:提供了详尽的文档和教程,帮助开发者快速上手。
Zend Framework 适用于构建高质量的 Web 应用和 API,适用于从小型应用到大型企业级系统的各种项目。
使用 ServBay 创建并运行 Zend Framework 项目
在这篇文章中,我们将使用 ServBay 提供的 PHP 环境来创建并运行一个 Zend Framework 项目。我们将利用 ServBay 的『主机』功能来设置 Web 服务器,并通过简单的配置实现项目的访问。
注意:如果你曾经是 NGINX 或 Apache 的用户
ServBay 默认使用 Caddy 作为 Web 服务器。对于从 NGINX 和 Apache 迁移到 ServBay 的用户,有一些关键变动点需要注意:
Caddy 配置
ServBay 已经内置了 Caddy,并且默认配置已经优化和调试好。开发者只需通过 ServBay 的『主机』功能来管理站点,无需手动修改 Caddy 配置文件。
Rewrite 规则和 .htaccess
在 NGINX 和 Apache 中,开发者通常需要自己编写 Rewrite 规则和 .htaccess 文件来处理 URL 重写和其他配置。然而,ServBay 出厂时已经配置好了 Caddy 的规则,因此,除非有特殊需求,否则开发者无需自己编写这些规则。
了解更多
更多相关信息,请参阅Rewrite与htaccess、Apache网站如何迁移到ServBay、NGINX网站如何迁移到ServBay。
创建 Zend Framework 项目
TIP
ServBay 建议开发者把网站放置在/Applications/ServBay/www
目录下,以方便管理。
安装 Composer
ServBay 出厂时已经自带 Composer,无需单独安装。
创建 Zend Framework 项目
使用 Composer 创建一个新的 Zend Framework 项目:
bashcd /Applications/ServBay/www mkdir servbay-zend-app cd servbay-zend-app composer create-project zendframework/skeleton-application .
1
2
3
4进入项目目录
进入新创建的 Zend Framework 项目目录:
bashcd /Applications/ServBay/www/servbay-zend-app
1
初始化配置
配置环境变量
在
config/autoload/global.php
文件中配置数据库连接信息和其他环境变量。确保以下配置已正确设置: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
配置 Web 服务器
使用 ServBay 的『主机』功能,通过 Web 服务器来访问 Zend Framework 项目。在 ServBay 的『主机』设置中,添加一个新的主机:
- 名字:
My First Zend Dev Site
- 域名:
servbay-zend-test.local
- 网站类型:
PHP
- PHP 版本:选择
8.3
- 网站根目录:
/Applications/ServBay/www/servbay-zend-app/public
详细设置步骤请参考 添加第一个网站。
添加示例代码
在 module/Application/config/module.config.php
文件中添加以下代码,以输出 "Hello ServBay!":
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
在 module/Application/src/Controller/IndexController.php
文件中添加以下代码:
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
在 module/Application/view/application/index/index.phtml
文件中添加以下代码:
<?php echo $this->message; ?>
访问网站
打开浏览器,访问 https://servbay-zend-test.local
,你会看到网页输出 Hello ServBay!
。
NoSQL数据库示例
Memcached 示例
安装 Memcached 扩展
在 ServBay 中,Memcached 扩展已经预装好,无需额外安装。
配置 Memcached
在
composer.json
文件中添加 Memcached 依赖:json{ "require": { "laminas/laminas-cache-storage-adapter-memcached": "^2.0" } }
1
2
3
4
5然后运行
composer update
安装依赖。配置路由
在
module/Application/config/module.config.php
文件中添加以下代码: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
16使用 Memcached
在控制器中使用缓存:
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
34在
module/Application/view/application/index/memcached.phtml
文件中添加以下代码:php<?php echo $this->message; ?>
1打开浏览器,访问
https://servbay-zend-test.local/memcached
Redis 示例
安装 Redis 扩展
在 ServBay 中,Redis 扩展已经预装好,无需额外安装。
配置 Redis
在
composer.json
文件中添加 Redis 依赖:json{ "require": { "laminas/laminas-cache-storage-adapter-redis": "^2.0" } }
1
2
3
4
5然后运行
composer update
安装依赖。配置路由
在
module/Application/config/module.config.php
文件中添加以下代码: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
16使用 Redis
在控制器中使用缓存:
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
35在
module/Application/view/application/index/redis.phtml
文件中添加以下代码:php<?php echo $this->message; ?>
1打开浏览器,访问
https://servbay-zend-test.local/redis
关系型数据库示例
创建数据库结构和迁移文件
创建迁移文件
使用 Laminas 的 Migrations 工具创建迁移文件:
bashcomposer require laminas/laminas-db
1编辑迁移文件
在
data/migrations
目录下创建一个新的迁移文件,并编辑它以定义数据库表结构: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
20运行迁移
手动运行迁移,创建数据库表:
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 示例
配置 MySQL
在
config/autoload/global.php
文件中配置 MySQL 连接信息: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配置路由
在
module/Application/config/module.config.php
文件中添加以下代码: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
26写入用户数据
在控制器中写入用户数据:
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 as $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
55在
module/Application/view/application/index/mysql-add.phtml
文件中添加以下代码:php<?php echo $this->message; ?>
1在
module/Application/view/application/index/mysql.phtml
文件中添加以下代码:php<?php echo $this->users; ?>
1打开浏览器,访问
https://servbay-zend-test.local/mysql-add
和https://servbay-zend-test.local/mysql
PostgreSQL 示例
配置 PostgreSQL
在
config/autoload/global.php
文件中配置 PostgreSQL 连接信息: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
9配置路由
在
module/Application/config/module.config.php
文件中添加以下代码: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
26写入用户数据
在控制器中写入用户数据:
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 = new Sql($this->adapter); $select = $sql->select('users'); $result = $this->adapter->query( $sql->buildSqlString($select), Adapter::QUERY_MODE_EXECUTE ); $users = []; foreach ($result as $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
55在
module/Application/view/application/index/pgsql-add.phtml
文件中添加以下代码:php<?php echo $this->message; ?>
1在
module/Application/view/application/index/pgsql.phtml
文件中添加以下代码:php<?php echo $this->users; ?>
1打开浏览器,访问
https://servbay-zend-test.local/pgsql-add
和https://servbay-zend-test.local/pgsql
通过以上步骤,您成功创建并运行了一个 Zend Framework 项目,并使用 ServBay 提供的功能来管理和访问您的项目,同时连接了多种数据库并调用数据。