/ / Symfony / Comment (0)

Tạo ứng dụng Symfony

Cài đặt Project

Trong symfony, các application có chung một cơ sở dữ liệu (data model) được nhóm lại trong một project. Với project Jobeet, chúng ta có 2 application: frontend và backend.
Tạo Project

Từ thư mục jobeet, chạy lệnh generate:project để tạo 1 project symfony:


$ php lib/vendor/symfony/data/bin/symfony generate:project jobeet

Ở Windows:


c:\> php lib\vendor\symfony\data\bin\symfony generate:project jobeet

Lệnh generate:project tạo ra cấu trúc file và thư mục mặc định cần cho một project symfony:

Thư mụcMô tả
apps/chứa các application của project
cache/chứa các file cache tạo bởi framework
config/chứa các file cấu hình
lib/chứa các lớp và thư viện
log/các file log của framework
plugins/chứa các plugin được cài đặt
test/chứa các file unit và functional test
web/thư mục web root (xem bên dưới)

Tại sao symfony tạo ra quá nhiều file vậy? Một trong những lợi ích của việc sử dụng full-stack framework là chuẩn hoá sự phát triển của bạn. Nhờ cấu trúc file và thư mục thống nhất của symfony, bất kì lập trình viên nào có hiểu biết về symfony cũng có thể thực hiện công việc bảo trì cho bất kì dự án symfony nào. Sau một thời gian ngắn, anh ta đã có thể bắt đầu code, sửa lỗi, và thêm tính năng mới.

Lệnh generate:project cũng tạo một shortcut symfony ở thư mục ngoài cùng của project Jobeet để giảm số kí tự phải gõ trong lệnh.

Vì thế, từ bây giờ, thay vì gõ đầy đủ đường dẫn, chúng ta chỉ cần gõ symfony.

Tạo Application

Bây giờ, tạo application frontend bằng lệnh generate:app:

$ php symfony generate:app --escaping-strategy=on --csrf-secret=Unique$ecret frontend

Khi chạy lệnh symfony, người dùng Unix có thể thay thế toàn bộ đoạn ‘php symfony‘ bằng ‘./symfony‘.

Ở Windows bạn có thể copy file ‘symfony.bat’ vào project của bạn và sử dụng ‘symfony’ thay vì ‘php symfony‘:

c:\> copy lib\vendor\symfony\data\bin\symfony.bat .

Một lần nữa, lệnh generate:app tạo cấu trúc thư mục mặc định cần thiết cho một application nằm trong thư mục apps/frontend:

Thư mụcMô tả
config/chứa các file cấu hình cho application
lib/các lớp và thư viện của application
modules/chứa mã nguồn của ứng dụng (MVC)
templates/chứa các file template toàn cục

Tất cả các lệnh của symfony phải chạy dưới thư mục gốc của project trừ khi có chỉ dẫn khác.

Khi gọi lệnh generate:app , chúng ta đã cung cấp hai lựa chọn liên quan đến bảo mật:

  • --escaping-strategy: cho phép output escaping để chống tấn công XSS
  • --csrf-secret: cho phép session tokens in form để chống tấn công CSRF

Nhờ 2 tham số này, chúng ta đã bảo vệ được ứng dụng của mình khỏi 2 lỗ hổng bảo mật phổ biến trên web.

Đường dẫn symfony

Bạn có thể xem phiên bản symfony sử dụng trong dự án của bạn bằng cách gõ:

$ php symfony -V

Lệnh này cũng hiển thị đường dẫn đến thư mục cài đặt symfony, được sử dụng trong file config/ProjectConfiguration.class.php:

// config/ProjectConfiguration.class.php
require_once '/Users/fabien/work/symfony/dev/1.2/lib/autoload/sfCoreAutoload.class.php';

để cho thuận tiện, thay đường dẫn tuyệt đối bằng đường dẫn tương đối:

// config/ProjectConfiguration.class.php
require_once dirname(__FILE__).'/../lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php';

Bây giờ, bạn có thể copy project Jobeet đến bất kì đâu, nó vẫn chạy được.

Môi trường

Trong thư mục web/ , bạn có thể thấy 2 file PHP: index.phpfrontend_dev.php. Những file này được gọi là front controllers: mọi yêu cầu đến ứng dụng đều thông qua chúng. Nhưng tại sao chúng ta có 2 file front controllers trong khi chúng ta chỉ có 1 ứng dụng?

Cả hai file đều gọi cùng một ứng dụng nhưng trong những môi trường khác nhau. Khi bạn phát triển một ứng dụng, trừ khi bạn phát triển trực tiếp sản phẩm trên server, bạn cần vài môi trường:

  • development environment: môi trường sử dụng bởi web developers để thêm các tính năng, sửa lỗi, …
  • test environment: môi trường sử dụng cho các ứng dụng test tự động.
  • staging environment: môi trường sử dụng bởi customer để test ứng dụng và thông báo lỗi và các tính năng thiếu.
  • production environment: môi trường tương tác với end user.

Trong môi trường development, ứng dụng cần log tất cả các request để dễ dàng tìm lỗi, nó phải hiển thị exception trên trình duyệt, và hệ thống cache phải được tắt để có thể thấy thay đổi khi thay đổi code. Vì thế, môi trường development phải được cấu hình cho phù hợp với lập trình viên:
exception_dev

Ở môi trường production, ứng dụng phải hiển thị một thông báo lỗi thay vì hiển thị lỗi cụ thể của hệ thống, và tất nhiêu, cache phải được bật. Vì thế, môi trường production phải được cấu hình cho phù hợp.
exception_prod

Mỗi môi trường trong symfony có một tập các cấu hình riêng và symfony có sẵn 3 môi trường: dev, test, và prod.

Nếu bạn mở các file front controller, bạn sẽ thấy chúng chỉ khác nhau về cấu hình của môi trường:


// web/index.php
<?php

require_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php');

$configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'prod', false);
sfContext::createInstance($configuration)->dispatch();

Tạo một môi trường mới trong symfony đơn giản là tạo một file front controller mới. Chúng ta sẽ xem cách thay đổi các cấu hình cho một môi trường ở các phần sau.

Nguồn bài viết: http://symfony.com/



07/05/2015
Written by admin

Hiện do a Tuyền (nguyên adminsite hocphp.info) không còn thời gian để phát triển site, nên do có cơ duyên và được a tin tưởng để cho mình tiếp tục phát triển. Hi vọng mọi người cùng nhau phát triển và chia sẽ nhiều hơn nữa, ngoài ra mình cũng cố gắng chia sẽ các seri về web cũng như các ngôn ngữ khác chất nhất có thể. có gì thiếu sót hi vọng mọi người bỏ qua.

Bài viết chùng chuyên mục

Gửi bình luận

Giới thiệu

Mình tạo ra blog này với mong muốn chia sẻ và học hỏi kinh nghiệm trong quá trình thiết kế website. Website đang trong quá trình phát triển chân thành cảm ơn mọi sự góp ý của các bạn để làm cho website ngày càng hoàn thiên.

DMCA.com Protection Status
Liên hệ
Theo dõi qua Email

Tổng hợp các bài viết về

Hoc php - CodeIgniter Framework - Laravel Framework - PHP va MYSQL