建立並運行 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 提供的功能來管理和訪問您的專案,同時連接了多種數據庫並調用數據。