创建并运行 Symfony 项目
什么是 Symfony?
Symfony 是一个由 SensioLabs 创建的开源 PHP Web 框架,致力于为开发人员提供一套高效、灵活且功能强大的工具集,用于构建现代 Web 应用程序。Symfony 提供了丰富的功能,如路由、模板引擎、表单处理、认证等,简化了常见的 Web 开发任务。
Symfony 的主要特性和优势
- 模块化设计:Symfony 采用模块化设计,允许开发者根据需要选择和使用组件。
- 高性能:通过优化的架构和缓存机制,Symfony 提供了出色的性能表现。
- 强大的社区支持:拥有庞大的开发者社区和丰富的生态系统。
- 灵活性:可以集成多种第三方库和扩展,适用于各种规模的项目。
- 良好的文档:提供了详尽的文档和教程,帮助开发者快速上手。
Symfony 可以帮助开发者快速构建高质量的 Web 应用和 API,适用于从小型应用到大型企业级系统的各种项目。
使用 ServBay 创建并运行 Symfony 项目
在这篇文章中,我们将使用 ServBay 提供的 PHP 环境来创建并运行一个 Symfony 项目。我们将利用 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。
创建 Symfony 项目
TIP
ServBay 建议开发者把网站放置在/Applications/ServBay/www
目录下,以方便管理。
安装 Composer
ServBay 出厂时已经自带 Composer,无需单独安装。
创建 Symfony 项目
使用 Composer 创建一个新的 Symfony 项目:
bashcd /Applications/ServBay/www mkdir servbay-symfony-app cd servbay-symfony-app composer create-project symfony/website-skeleton .
1
2
3
4进入项目目录
进入新创建的 Symfony 项目目录:
bashcd /Applications/ServBay/www/servbay-symfony-app
1
初始化配置
配置环境变量
在
.env
文件中配置数据库连接信息和其他环境变量。确保以下配置已正确设置:APP_ENV=dev APP_SECRET=your_secret_key DATABASE_URL=mysql://root:[email protected]:3306/servbay_symfony_app
1
2
3
配置 Web 服务器
使用 ServBay 的『主机』功能,通过 Web 服务器来访问 Symfony 项目。在 ServBay 的『主机』设置中,添加一个新的主机:
- 名字:
My First Symfony Dev Site
- 域名:
servbay-symfony-test.local
- 网站类型:
PHP
- PHP 版本:选择
8.3
- 网站根目录:
/Applications/ServBay/www/servbay-symfony-app/public
详细设置步骤请参考 添加第一个网站。
添加示例代码
在 config/routes.yaml
文件中添加以下代码,以输出 "Hello ServBay!":
index:
path: /
controller: App\Controller\DefaultController::index
2
3
在 src/Controller/DefaultController.php
文件中添加以下代码:
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class DefaultController
{
/**
* @Route("/", name="index")
*/
public function index(): Response
{
return new Response('Hello ServBay!');
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
访问网站
打开浏览器,访问 https://servbay-symfony-test.local
,你会看到网页输出 Hello ServBay!
。
NoSQL数据库示例
Memcached 示例
安装 Memcached 扩展
在 ServBay 中,Memcached 扩展已经预装好,无需额外安装。
配置 Memcached
在
.env
文件中配置 Memcached 连接信息:CACHE_DRIVER=memcached MEMCACHED_HOST=127.0.0.1
1
2在
config/routes.yaml
文件中添加以下代码:
memcached:
path: /memcached
controller: App\Controller\DefaultController::memcached
2
3
使用 Memcached
在控制器中使用缓存:
phpuse Symfony\Component\Cache\Adapter\MemcachedAdapter; class DefaultController { /** * @Route("/memcached", name="memcached") */ public function memcached(): Response { $client = MemcachedAdapter::createConnection('memcached://127.0.0.1:11211'); $cache = new MemcachedAdapter($client); $cacheItem = $cache->getItem('my_cache_key'); if (!$cacheItem->isHit()) { $cacheItem->set('Hello Memcached!'); $cache->save($cacheItem); } return new Response($cacheItem->get()); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21打开浏览器,访问
https://servbay-symfony-test.local/memcached
Redis 示例
安装 Redis 扩展
在 ServBay 中,Redis 扩展已经预装好,无需额外安装。
配置 Redis
在
.env
文件中配置 Redis 连接信息:REDIS_URL=redis://127.0.0.1:6379
1在
config/routes.yaml
文件中添加以下代码:
redis:
path: /redis
controller: App\Controller\DefaultController::redis
2
3
使用 Redis
在控制器中使用缓存:
phpuse Symfony\Component\Cache\Adapter\RedisAdapter; class DefaultController { /** * @Route("/redis", name="redis") */ public function redis(): Response { $redisConnection = RedisAdapter::createConnection('redis://127.0.0.1:6379'); $cache = new RedisAdapter($redisConnection); $cacheItem = $cache->getItem('my_cache_key'); if (!$cacheItem->isHit()) { $cacheItem->set('Hello Redis!'); $cache->save($cacheItem); } return new Response($cacheItem->get()); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21打开浏览器,访问
https://servbay-symfony-test.local/redis
关系型数据库示例
创建数据库结构和迁移文件
创建迁移文件
使用 Symfony 的 Maker Bundle 创建迁移文件:
bashphp bin/console make:migration
1编辑迁移文件
在
src/Migrations
目录下找到新创建的迁移文件,并编辑它以定义数据库表结构:phppublic function up(Schema $schema): void { $this->addSql('CREATE TABLE users (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL UNIQUE, PRIMARY KEY(id))'); }
1
2
3
4运行迁移
使用 Symfony 命令运行迁移,创建数据库表:
bashphp bin/console doctrine:migrations:migrate
1
MySQL 示例
配置 MySQL
在
.env
文件中配置 MySQL 连接信息:DATABASE_URL=mysql://root:[email protected]:3306/servbay_symfony_app
1在
config/routes.yaml
文件中添加以下代码:
mysql_add:
path: /mysql-add
controller: App\Controller\DefaultController::mysqlAdd
mysql_get:
path: /mysql
controller: App\Controller\DefaultController::mysql
2
3
4
5
6
写入用户数据
在控制器中写入用户数据:
phpuse Doctrine\ORM\EntityManagerInterface; use App\Entity\User; use Symfony\Component\Routing\Annotation\Route; class DefaultController { private $entityManager; public function __construct(EntityManagerInterface $entityManager) { $this->entityManager = $entityManager; } /** * @Route("/mysql-add", name="mysql_add") */ public function mysqlAdd(): Response { $user = new User(); $user->setName('ServBay'); $user->setEmail('[email protected]'); $this->entityManager->persist($user); $this->entityManager->flush(); return new Response('User added'); } /** * @Route("/mysql", name="mysql") */ public function mysql(): Response { $users = $this->entityManager->getRepository(User::class)->findAll(); return new Response(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打开浏览器,访问
https://servbay-symfony-test.local/mysql-add
和https://servbay-symfony-test.local/mysql
PostgreSQL 示例
配置 PostgreSQL
在
.env
文件中配置 PostgreSQL 连接信息:DATABASE_URL=pgsql://root:[email protected]:5432/servbay_symfony_app
1在
config/routes.yaml
文件中添加以下代码:
pgsql_add:
path: /pgsql-add
controller: App\Controller\DefaultController::pgsqlAdd
pgsql_get:
path: /pgsql
controller: App\Controller\DefaultController::pgsql
2
3
4
5
6
写入用户数据
在控制器中写入用户数据:
phpuse Doctrine\ORM\EntityManagerInterface; use App\Entity\User; use Symfony\Component\Routing\Annotation\Route; class DefaultController { private $entityManager; public function __construct(EntityManagerInterface $entityManager) { $this->entityManager = $entityManager; } /** * @Route("/pgsql-add", name="pgsql_add") */ public function pgsqlAdd(): Response { $user = new User(); $user->setName('ServBay'); $user->setEmail('[email protected]'); $this->entityManager->persist($user); $this->entityManager->flush(); return new Response('User added'); } /** * @Route("/pgsql", name="pgsql") */ public function pgsql(): Response { $users = $this->entityManager->getRepository(User::class)->findAll(); return new Response(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打开浏览器,访问
https://servbay-symfony-test.local/pgsql-add
和https://servbay-symfony-test.local/pgsql
通过以上步骤,您成功创建并运行了一个 Symfony 项目,并使用 ServBay 提供的功能来管理和访问您的项目,同时连接了多种数据库并调用数据。