Ở symfony, các application chia sẻ cùng một data model và được nhóm lại trong một project. Trong phần lớn các project, chúng ta thường có 2 application: frontend và backend.
Tạo Project
Ở thư mục sfproject/
, chạy tác vụ symfony generate:project
để tạo project symfony:
$ php lib/vendor/symfony/data/bin/symfony generate:project PROJECT_NAME
Ở Windows:
c:\> php lib\vendor\symfony\data\bin\symfony generate:project PROJECT_NAME
Tác vụ generate:project
tạo ra cấu trúc thư mục và các file cần thiết cho một project symfony:
Thư mục | Mô tả |
---|---|
apps/ |
Chứa các application của project |
cache/ |
Chứa các file cache của framework |
config/ |
Chứa các file cấu hình |
lib/ |
Chứa các thư viện dùng trong project |
log/ |
Chứa file log của framework |
plugins/ |
Chứa các plugin đã cài đặt |
test/ |
Chứa các file unit và functional test |
web/ |
Thư mục web root (xem bên dưới) |
note
Tại sao symfony tạo ra quá nhiều file như vậy? Một trong những lợi ích của việc sử dụng full-stack framework là chuẩn hóa việc phát triển. Nhờ có cấu trúc file và thư mục mặc định của symfony, bất kì lập trình viên nào có kiến thức về symfony cũng có thể maintenance project symfony. Trong vài phút, anh ta đã có thể nắm bắt được code, sửa lỗi, và thêm tính năng mới.
Tác vụ generate:project
cũng tạo một shortcut symfony
ở thư mục gốc của project để giảm số kí tự bạn phải gõ khi chạy một lệnh.
Do đó, từ bây giờ, thay vì sử dụng đầy đủ đường dẫn đến symfony, bạn chỉ cần dùng shortcut symfony
.
Tạo Application
Tạo application frontend bằng cách chạy tác vụ generate:app
:
$ php symfony generate:app --escaping-strategy=on --csrf-secret=UniqueSecret frontend
tip
Do dùng file shortcut symfony, nên người dùng Unix có thể thay thế cụm
'php symfony
' bằng './symfony
'.
Ở Windows bạn có thể copy file 'symfony.bat
' tới project của bạn và sử dụng
'symfony
' thay vì 'php symfony
':
c:\> copy lib\vendor\symfony\data\bin\symfony.bat .
Dựa vào tên application được cung cấp dưới dạng một tham số, tác vụ generate:app
tạo cấu trúc thư mục mặc định cần thiết trong thư mục apps/frontend/
:
Thư mục | Mô tả |
---|---|
config/ |
Chứa file cấu hình của application |
lib/ |
Chứa thư viện dùng trong application |
modules/ |
Mã nguồn application (MVC) |
templates/ |
File template toàn cục |
tip
Khi gọi tác vụ generate:app
, bạn cũng đã cung cấp 2 options bảo mật:
--escaping-strategy
: Cho phép output escaping để tránh tấn công XSS--csrf-secret
: Cho phép session tokens trong forms để tránh tấn công CSRF
Bằng cách cung cấp 2 tham số này cho tác vụ, bạn đã bảo vệ ứng dụng của mình khỏi những tấn công phổ biến trên web.
Nếu bạn chưa biết về XSS và CSRF, hãy dành chút thời gian để tìm hiểu về chúng.
Phân quyền cho thư mục
Trước khi thử truy cập project vừa tạo, bạn cần thiết lập quyền khi cho thư mục
cache/
và log/
, để web server có thể ghi vào đó:
$ chmod 777 cache/ log/
Cấu hình cơ sở dữ liệu
Một trong những điều đầu tiên bạn muốn làm là cấu hình để kết nối đến cơ sở dữ liệu cho project của bạn. Symfony framework hỗ trợ tất cả các sơ sở dữ liệu hỗ trợ PDO (MySQL, PostgreSQL, SQLite, Oracle, MSSQL, ...). Symfony chứa sẵn 2 ORM: Propel và Doctrine. Propel là mặc định, nhưng chuyển sang Doctrine rất đơn giản (xem mục tiếp theo).
Cấu hình cơ sở dữ liệu được thực hiện thông qua tác vụ configure:database
:
$ php symfony configure:database "mysql:host=localhost;dbname=dbname" root mYsEcret
Tác vụ configure:database
nhận 3 tham số: PDO DSN, username, và password để truy cập database. Nếu bạn không cần password để truy cập database, bạn có thể bỏ qua tham số này.
Chuyển sang Doctrine
Nếu bạn quyết định sử dụng Doctrine thay cho Propel, đầu tiên bạn cần enable
sfDoctrinePlugin
và disable sfPropelPlugin
. Điều này có thể thực hiện bằng cách thay đổi file config/ProjectConfiguration.class.php
:
public function setup() { $this->enableAllPluginsExcept(array('sfPropelPlugin', 'sfCompat10Plugin')); }
Sau khi lưu lại thay đổi, chạy những lệnh sau:
$ php symfony plugin:publish-assets $ php symfony cc $ rm web/sfPropelPlugin $ rm config/propel.ini $ rm config/schema.yml $ rm config/databases.yml
Sau đó, chạy lệnh để cấu hình database cho Doctrine:
$ php symfony configure:database --name=doctrine --class=sfDoctrineDatabase "mysql:host=localhost;dbname=jobeet" root mYsEcret
This work is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported License license.