Tạo và chạy dự án Symfony
Symfony là gì?
Symfony là một framework PHP mã nguồn mở được tạo bởi SensioLabs, cung cấp cho nhà phát triển một bộ công cụ hiệu quả, linh hoạt và mạnh mẽ để xây dựng các ứng dụng web hiện đại. Symfony cung cấp nhiều tính năng phong phú như định tuyến, công cụ mẫu, xử lý biểu mẫu, xác thực, vv., giúp đơn giản hóa các tác vụ phát triển web thông thường.
Các đặc tính và lợi ích chính của Symfony
- Thiết kế mô-đun: Symfony sử dụng thiết kế mô-đun, cho phép nhà phát triển chọn và sử dụng các thành phần tùy theo nhu cầu.
- Hiệu suất cao: Với kiến trúc tối ưu và cơ chế bộ nhớ đệm, Symfony cung cấp hiệu suất xuất sắc.
- Hỗ trợ cộng đồng mạnh mẽ: Có một cộng đồng nhà phát triển lớn và hệ sinh thái phong phú.
- Linh hoạt: Có thể tích hợp nhiều thư viện và phần mở rộng bên thứ ba, phù hợp cho các dự án quy mô nhỏ đến lớn.
- Tài liệu tốt: Cung cấp tài liệu chi tiết và các bài hướng dẫn, giúp nhà phát triển dễ dàng tiếp cận.
Symfony giúp nhà phát triển nhanh chóng xây dựng các ứng dụng web và API chất lượng cao, phù hợp với các dự án từ nhỏ đến hệ thống lớn cấp doanh nghiệp.
Tạo và chạy dự án Symfony với ServBay
Trong bài này, chúng ta sẽ sử dụng môi trường PHP do ServBay cung cấp để tạo và chạy một dự án Symfony. Chúng ta sẽ sử dụng tính năng 'Host' của ServBay để thiết lập máy chủ web và thực hiện cấu hình đơn giản để truy cập dự án.
Chú ý: Nếu bạn đã từng là người dùng NGINX hoặc Apache
ServBay mặc định sử dụng Caddy làm máy chủ web. Đối với những người dùng di chuyển từ NGINX và Apache sang ServBay, cần lưu ý một số điểm thay đổi quan trọng:
Cấu hình Caddy
ServBay đã tích hợp sẵn Caddy, và cấu hình mặc định đã được tối ưu hóa. Nhà phát triển chỉ cần sử dụng tính năng 'Host' của ServBay để quản lý trang web, không cần phải tự tay chỉnh sửa tệp cấu hình Caddy.
Quy tắc Rewrite và .htaccess
Trong NGINX và Apache, nhà phát triển thường phải tự viết các quy tắc Rewrite và tệp .htaccess để xử lý URL rewrite và cấu hình khác. Tuy nhiên, ServBay đã cấu hình sẵn các quy tắc của Caddy, vì vậy, trừ khi có nhu cầu đặc biệt, nhà phát triển không cần tự viết các quy tắc này.
Tìm hiểu thêm
Để biết thêm thông tin, vui lòng tham khảo Rewrite và htaccess, Cách di chuyển trang web Apache đến ServBay, Cách di chuyển trang web NGINX đến ServBay.
Tạo dự án Symfony
TIP
ServBay khuyến nghị nhà phát triển đặt trang web tại thư mục /Applications/ServBay/www
để dễ dàng quản lý.
Cài đặt Composer
ServBay đã đi kèm Composer[../composer.md], không cần phải cài đặt riêng.
Tạo dự án Symfony
Sử dụng Composer để tạo một dự án Symfony mới:
bashcd /Applications/ServBay/www mkdir servbay-symfony-app cd servbay-symfony-app composer create-project symfony/website-skeleton .
1
2
3
4Vào thư mục dự án
Vào thư mục dự án Symfony mới tạo:
bashcd /Applications/ServBay/www/servbay-symfony-app
1
Cấu hình khởi tạo
Cấu hình biến môi trường
Trong tệp
.env
, cấu hình thông tin kết nối cơ sở dữ liệu và các biến môi trường khác. Đảm bảo cấu hình sau đã được cài đặt đúng:APP_ENV=dev APP_SECRET=your_secret_key DATABASE_URL=mysql://root:[email protected]:3306/servbay_symfony_app
1
2
3
Cấu hình máy chủ Web
Sử dụng tính năng 'Host' của ServBay để truy cập dự án Symfony. Trong mục cài đặt 'Host' của ServBay, thêm một host mới:
- Tên:
My First Symfony Dev Site
- Domain:
servbay-symfony-test.local
- Loại website:
PHP
- Phiên bản PHP: chọn
8.3
- Thư mục gốc của website:
/Applications/ServBay/www/servbay-symfony-app/public
Để biết chi tiết các bước cài đặt, vui lòng tham khảo Thêm website đầu tiên.
Thêm mã ví dụ
Thêm đoạn mã sau vào tệp config/routes.yaml
để xuất "Hello ServBay!":
index:
path: /
controller: App\Controller\DefaultController::index
2
3
Thêm đoạn mã sau vào tệp 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
Truy cập website
Mở trình duyệt và truy cập https://servbay-symfony-test.local
, bạn sẽ thấy trang web xuất Hello ServBay!
.
Ví dụ về cơ sở dữ liệu NoSQL
Ví dụ Memcached
Cài đặt phần mở rộng Memcached
Tại ServBay, phần mở rộng Memcached đã được cài đặt sẵn, không cần cài đặt thêm.
Cấu hình Memcached
Cấu hình thông tin kết nối Memcached trong tệp
.env
:CACHE_DRIVER=memcached MEMCACHED_HOST=127.0.0.1
1
2Thêm đoạn mã sau vào tệp
config/routes.yaml
:
memcached:
path: /memcached
controller: App\Controller\DefaultController::memcached
2
3
Sử dụng Memcached
Sử dụng bộ nhớ đệm trong controller:
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
21Mở trình duyệt và truy cập
https://servbay-symfony-test.local/memcached
Ví dụ Redis
Cài đặt phần mở rộng Redis
Tại ServBay, phần mở rộng Redis đã được cài đặt sẵn, không cần cài đặt thêm.
Cấu hình Redis
Cấu hình thông tin kết nối Redis trong tệp
.env
:REDIS_URL=redis://127.0.0.1:6379
1Thêm đoạn mã sau vào tệp
config/routes.yaml
:
redis:
path: /redis
controller: App\Controller\DefaultController::redis
2
3
Sử dụng Redis
Sử dụng bộ nhớ đệm trong controller:
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
21Mở trình duyệt và truy cập
https://servbay-symfony-test.local/redis
Ví dụ về cơ sở dữ liệu quan hệ
Tạo cấu trúc và file di chuyển cơ sở dữ liệu
Tạo file di chuyển
Sử dụng Symfony Maker Bundle tạo file di chuyển:
bashphp bin/console make:migration
1Chỉnh sửa file di chuyển
Trong thư mục
src/Migrations
tìm file di chuyển mới và chỉnh sửa nó để định nghĩa cấu trúc bảng cơ sở dữ liệu: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
4Chạy di chuyển
Sử dụng lệnh Symfony để chạy di chuyển và tạo bảng cơ sở dữ liệu:
bashphp bin/console doctrine:migrations:migrate
1
Ví dụ MySQL
Cấu hình MySQL
Cấu hình thông tin kết nối MySQL trong tệp
.env
:DATABASE_URL=mysql://root:[email protected]:3306/servbay_symfony_app
1Thêm đoạn mã sau vào tệp
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
Ghi dữ liệu người dùng
Ghi dữ liệu người dùng trong controller:
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
37Mở trình duyệt và truy cập
https://servbay-symfony-test.local/mysql-add
vàhttps://servbay-symfony-test.local/mysql
Ví dụ PostgreSQL
Cấu hình PostgreSQL
Cấu hình thông tin kết nối PostgreSQL trong tệp
.env
:DATABASE_URL=pgsql://root:[email protected]:5432/servbay_symfony_app
1Thêm đoạn mã sau vào tệp
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
Ghi dữ liệu người dùng
Ghi dữ liệu người dùng trong controller:
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
37Mở trình duyệt và truy cập
https://servbay-symfony-test.local/pgsql-add
vàhttps://servbay-symfony-test.local/pgsql
Thông qua các bước trên, bạn đã tạo và chạy thành công một dự án Symfony, sử dụng các tính năng do ServBay cung cấp để quản lý và truy cập dự án của bạn, đồng thời kết nối với nhiều cơ sở dữ liệu và gọi dữ liệu.