Phụ lục
Phần 1. Giới thiệu tổng quan 3
1.1. Đặt vấn đề 3
1.2. Công nghệ sử dụng 4
1.3. Chức năng của website 4
Phần 3. Phân tích và thiết kế 6
3.1 Chức năng của hệ thống 6
3.1.1 Khách ghé thăm website 6
3.1.2 Chức năng thành viên 7
3.1.3 Chức năng của admin 7
3.2 ERD 8
3.3 Thiết kế cơ sở dữ liệu 10
3.3.1 Bảng tin tức (news) 11
3.3.2 Bảng comments 11
3.3.3 Bảng sản phẩm(products) 11
3.3.4 Bảng nhà cung cấp(suppliers) 12
3.3.5 Bảng nhóm sản phẩm(categories) 12
3.3.6 Chi tiết hóa đơn(cart_detail) 13
3.3.7 Hóa đơn(Cart) 13
3.3.8 Người dùng(customer) 14
Phần 4. Thiết kế giao diện và cài đặt chương trình 14
4.1 Tổng quát về công nghệ và công cụ sử dụng 14
4.1.1 Tổng quát về PHP 14
4.1.2 Cú pháp của PHP 18
4.1.3 Tổng quát về MySQL Server 23
4.1.4 Tổng quát về Ajax 24
4.2 Framework symfony 29
4.2.1 Giới thiệu 29
4.2.2 Cài đặt symfony 31
4.2.3 Cài đặt Project 33
4.2.4 Tạo Application 34
4.2.5 Cài đặt Web server 36
4.2.6 Phát triển một dự án với symfony 39
4.3 Giao diện và các chức năng của chương trình 61
4.2.1 Giao diện chính 61
4.3.3 Trang đăng ký thành viên 62
4.3.4 Đăng Nhập 62
4.3.4.1 Trang giỏ hang 64
4.3.5 Đặt Hàng 64
4.3.6 Thông kê những đơn hàng đã đặt 65
4.3.7 Hình ảnh một số mẫu giấy dán tường 65
4.3.8 Trang tin nội thất 66
4.3.9 Trang quản trị 67
4.3.10 Trang quản lý tin tức 67
4.3.11 Quản lý sản phẩm 68
4.3.12 Trang quản lý người dùng 68
4.3.13 Trang quản lý hóa đơn 69
4.3.14 Trang quản lý hình ảnh 69
4.3.15 Trang nhóm sản phẩm 70
Phần 5. Kết luận 70
5.1 Những điều đã làm được : 70
5.2 Hạn chế: 71
5.3 Hướng phát triển : 71
5.4 Tài liệu tham khảo 71
73 trang |
Chia sẻ: netpro | Lượt xem: 2334 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Đồ án Xây dựng website bán giấy dán tường, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
lý HTML, xử lý các sự kiện trong trang HTML, tạo các hiệu ứng đẹp, xử lý Ajax nhanh và ngắn gọn hơn cho ứng dụng web của bạn. jQuery trở thành thư viện được lựa chọn cho các nhà phát triển web và nhanh chóng trở thành sự lựa chọn đầu tiên cho các lập trình viên đang tìm cách để giảm nhẹ công việc phát triển dịch vụ phía khách của họ và tạo ra các RIA (Rich Internet Applicatrion) một cách nhanh chóng và hiệu quả. Do việc sử dụng RIA trở nên ngày càng phổ biến trên toàn thế giới, nên việc sử dụng các thư viện JavaScript để hỗ trợ sự phát triển của họ cũng sẽ tiếp tục tăng. RIA được định nghĩa (không rõ ràng) vì rằng các ứng dụng chạy thông qua trình duyệt, trình duyệt này sử dụng kết hợp của CSS/JavaScript/Ajax để tạo ra công việc trên ứng dụng của máy tính để bàn. Các tính năng mới nhất, được bổ sung vào các bản phát hành gần đây của Firefox, Internet Explorer, Safari, và bản phát hành gần đây của trình duyệt Google Chrome mới, được tập trung vào việc tăng tốc độ của máy JavaScript nội bộ của mỗi trình duyệt nhằm mục đích duy nhất là làm cho nó trở nên thuận lợi hơn cho loại ứng dụng RIAs, loại ứng dụng mà những người tạo ra trình duyệt tưởng tượng là chúng ta sẽ sử dụng trong tương lai gần. Các công ty này hình dung các trang Web có chứa hàng chục ngàn dòng mã JavaScript, cho thấy tầm quan trọng của một thư viện hoàn thiện và không có lỗi và từ đó sẽ bắt đầu mọi công việc quan trọng hơn.
Cho nên, vì tương lai của các ứng dụng web đang hướng tới các giao diện nhúng và phong phú này, nên các nhà phát triển web ngày càng chú trọng vào các công cụ để giảm nhẹ các công việc. Hiện giờ trên thế giới đã có một số thư viện JavaScript, mỗi một thư viện có những điểm mạnh và điểm yếu và có những người hâm mộ với lời phê bình riêng của nó. jQuery đã trở thành sự lựa chọn chiếm ưu thế cho các thư viện JavaScript và sự lựa chọn đó đang tăng lên nhanh chóng.
Framework symfony
4.2.1 Giới thiệu
Symfony là một framework tổ chức việc phát triển ứng dụng bằng việc tự động hóa nhiều mẫu được dùng cho 1 mục đích xác định. Một framework tạo cấu trúc cho mã, thúc đẩy lập trình viên viết những mã tốt hơn, dễ đọc hơn và dễ bảo trì hơn. Cuối cùng, là một framework làm cho việc lập trình dễ hơn bởi vì nó bao hàm những tác vụ phức tạp trong những câu lệnh đơn giản. Symfony là một framework đầy đủ được thiết kế để tối ưu việc phát triển ứng dụng web bằng một vài đặc điểm chính. Với những người mới bắt đầu, nó phân chia những qui tắc nghiệp vụ, server logic và phần hiển thị của ứng dụng web. Nó có những công cụ và class để thu ngắn thời gian phát triển của những ứng dụng web phức tạp. Thêm vào đó, nó tự động hóa những công việc thông thường để lập trình viên có thể tập trung hoàn toàn vào những đặc điểm của ứng dụng. Kết quả cuối cùng của những điểm lợi này là không cần phải lặp lại (reinvent the wheel) mỗi lần tạo ứng dụng web! Symfony được viết hoàn toàn bằng PHP 5. Nó đã được kiểm tra một cách hoàn hảo trong nhiều dự án thực tế khác nhau và thực sự được dùng cho những website kinh doanh điện tử có yêu cầu cao. Nó tương thích với hầu hết các loại cơ sở dữ liệu, bao gồm MySQL, PostgreSQL, Oracle, và Microsoft SQL Server. Nó chạy trên hệ điều hành *nix và Windows. Hãy bắt đầu xem xét những tính năng của nó. Những tính năng của SymfonySymfony được xây dựng để thực hiện các yêu cầu sau:
- Dễ cài đặt và cấu hình trên hầu hết các hệ điều hành (và được bảo đảm làm việc trên các hệ điều hành chuẩn *nix và Windows) - Độc lập với hệ cơ sở dữ liệu - Dễ dùng trong hầu hết các trường hợp nhưng vẫn đủ mềm dẻo để thích nghi với những trường hợp phức tạp - Hoạt động theo cấu hình định trước -- lập trình viên chỉ cần cấu hình trong những trường hợp riêng biệt - Tuân theo những hoạt động và mẫu thiết kế tốt nhất - Sẵn sàng cho môi trường xí nghiệp -- thích nghi với những chính sách và kiến trúc công nghệ thông tin và đủ ổn định cho những dự án dài hạn. - Mã rất dễ đọc, với những chú thích kiểu phpDocumentor, dễ dàng bảo trì - Dễ dàng mở rộng, cho phép tích hợp với những thư viện khác Những tính năng dự án web được tự động. Hầu hết các chức năng thông thường của những dự án web được tự động trong symfony, như sau: - Lớp internationalization có sẵn cho phép phiên dịch giao diện, dữ liệu cũng như là content localization. - Phần presentation sử dụng template và layout có thể được xây dựng bởi người thiết kế HTML mà không cần có kiến thức về framework. Các helper làm giảm số lượng mã presentation phải viết bằng cách tóm gọn các phần của mã vào những function đơn giản. - Các form hỗ trợ kiểm tra và điền tự động, và điều này đảm bảo chất lượng tốt của dữ liệu trong cơ sở dữ liệu và kinh nghiệm người sử dụng tốt hơn. - Việc escape output bảo vệ các ứng dụng khỏi những tấn công thông qua dữ liệu bị hỏng. - Những tính năng quản lý cache giúp giảm lượng băng thông và tải của máy chủ. - Những tính năng phân quyền và xác nhận giúp việc tạo các quản lý những mục hạn chế và bảo mật người dùng dễ dàng hơn. - Việc định hướng và các URL thông minh làm cho phần địa chỉ của các trang trở nên thân thiện với máy tìm kiếm. - Các tính năng quản lý API và email sẵn có cho phép ứng dụng web vượt qua những tương tác trình duyệt cổ điển. - Các danh sách trở nên thân thiện với người dùng hơn nhờ việc phân trang, sắp xếp và tìm kiếm 1 cách tự động. - Các factory, plugins và mixins cung cấp khả năng mở rộng ở mức cao. - Các tương tác AJAX dễ hiện thực nhờ vào các helper 1 dòng tóm lượt những hiệu ứng javascript tương thích với các trình duyệt. Môi trường và công cụ phát triển: Để đáp ứng những yêu cầu của những doanh nghiệp có các chuẩn viết mã riêng và các qui tắc quản lý dự án, symfony có thể hoàn toàn được tùy biến. Mặc nhiên nó cung cấp một vài môi trường phát triển và được gói gọn với nhiều công cụ để tự động hóa những nhiệm vụ công nghệ phần mềm thông thường: - Các công cụ sinh mã tự động rất tuyệt cho việc tạo bản prototype và phần quản lý backend chỉ với vài dòng lệnh. - Unit và funtional testing framework sẵn có cung cấp những công cụ rất tốt cho phép test-driven developement - Debug: giúp debug tất cả thông tin mà lập trình viên cần trên trang - Giao diện chế độ dòng lệnh tự động hóa triển khai các ứng dụng giữa hai server - Tính năng logging cung cấp cho adminnistrators những chi tiết đầy đủ về sự hoạt động của một ứng dụng.
4.2.2 Cài đặt symfony
Đầu tiên, tạo một thư mục để chứa các file của project Jobeet:
c:\> mkdir c:\development\sfprojects\jobeet
c:\> cd c:\development\sfprojects\jobeet
Tạo thư mục để chứa thư viện symfony:
$ mkdir -p lib/vendor
Để cài đặt symfony, download file nén trên trang web symfony. Hướng dẫn này được viết trên symfony 1.2, hãy download phiên bản mới nhất của symfony 1.2.
Ở mục "Source Download", bạn sẽ tìm thấy file nén dạng .tgz hoặc .zip. Download file này và copy vào thư mục vừa tạo lib/vendor, sau đó giải nén:
$ cd lib/vendor
$ tar zxpf symfony-1.2-latest.tgz
$ mv symfony-1.2.0 symfony
Ở Windows, việc giải nén file zip có thể làm từ menu chuột phải. Sau khi đổi tên thư mục thành symfony, chúng ta có thư mục như sau c:\development\sfprojects\jobeet\lib\vendor\symfony.
Do cấu hình PHP có thể khác nhau, chúng ta cần kiểm tra lại cấu hình PHP để chắc chắn các yêu cầu tối thiểu để chạy symfony được đáp ứng. Chạy đoạn script kiểm tra từ dòng lệnh:
$ cd ../..
$ php lib/vendor/symfony/data/bin/check_configuration.php
Nếu có vấn đề, màn hình sẽ đưa ra gợi ý và cách sửa. Bạn có chạy file kiểm tra cấu hình PHP từ trình duyệt. Copy file vào thư mục gốc của web server và truy cập từ trình duyệt. Đừng quên xóa file đi sau khi đã kiểm tra xong.
Nếu đoạn script không hiện thông báo lỗi, hãy kiểm tra để chắc rằng symfony được cài thành công bằng cách sử dụng lệnh của symfony để xem phiên bản (chữ cái V viết hoa):
$ php lib/vendor/symfony/data/bin/symfony -V
Ở Windows:
c:\> cd ..\..
c:\> php lib\vendor\symfony\data\bin\symfony -V
Nếu bạn muốn xem tất cả các lệnh của symfony, gõ symfony để xem danh sách các lệnh:
$ php lib/vendor/symfony/data/bin/symfony
Ở Windows:
c:\> php lib\vendor\symfony\data\bin\symfony
Các lệnh của symfony rất hữu dụng. Nó cung cấp rất nhiều công cụ giúp cho việc phát triển sản phẩm của bạn tiện lợi như xoá cache, tự động sinh code, ...
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ừ 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:
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
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:
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_oncedirname(__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.php và frontend_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ó một ứ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.
Ở 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.
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();
Cài đặt Web server
Cài đặt webserver theo cách thông thường
Trong phần trước, chúng ta đã tạo một thư mục để chứa project Jobeet. Nếu bạn tạo thư mục này dưới thư mục gốc của web server, bạn đã có thể truy cập vào project trên trình duyệt.
Thật là dễ dàng và không cần phải cấu hình gì cả! Tuy nhiên, hãy thử truy cập file config/databases.yml từ trình duyệt để hiểu tác hại của sự lười biếng này.
Không bao giờ được sử dụng cách cài đặt này trên server cho một sản phẩm thực sự và hãy đọc phần tiếp theo để biết cách cấu hình web server đúng đắn.
Cài đặt webserver theo cách bảo mật
Tốt nhất là chỉ đặt trong thư mục web root các file mà trình duyệt cần truy cập trực tiếp như stylesheets, JavaScripts, hoặc file ảnh. Mặc định, chúng tôi để những file này trong thư mục web của symfony project.
Nếu bạn xem trong thư mục này, bạn sẽ thấy vài thư mục con như css, images, js và 2 file front controller. File front controllers là file php duy nhất cần đặt trong thư mục web root. Tất cả các file PHP khác có thể ẩn đi đối với trình duyệt, để bảo mật cho ứng dụng.
Bây giờ cần thay đổi cấu hình Apache để có thể truy cập project.
Mở file cấu hình httpd.conf và thêm vào cuối file:
# Be sure to only have this line once in your configuration
NameVirtualHost 127.0.0.1:8080
# This is the configuration for Jobeet
Listen 127.0.0.1:8080
DocumentRoot "/home/sfprojects/jobeet/web"
DirectoryIndex index.php
AllowOverride All
Allow from All
Alias /sf /home/sfprojects/jobeet/lib/vendor/symfony/data/web/sf
AllowOverride All
Allow from All
Cấu hình này giúp Apache lắng nghe cổng 8080 trên máy bạn, vì thế website Jobeet có thể được truy cập được theo URL:
Bạn có thể đổi 8080 thành bất kì số nào nhưng nên lớn hơn 1024 để chắc rằng cổng này chưa được sử dụng.
Cấu hình để tạo một tên miền cho Jobeet
Nếu bạn có quyền administrator trên máy, tốt nhất là tạo một virtual hosts thay vì thêm một cổng mới mỗi khi bạn tạo một project mới. Thay vì tạo một cổng và Listen , hãy chọn một tên miền và thêm ServerName:
# This is the configuration for Jobeet
ServerName jobeet.localhost
Tên miền jobeet.localhost phải được khai báo. Nếu bạn dùng Linux, bạn cần thêm vào trong file /etc/hosts . Nếu bạn dùng Windows XP, file này nằm trong thư mục C:\WINDOWS\system32\drivers\etc\.
Thêm dòng sau: 127.0.0.1 jobeet.localhost
Kiểm tra cấu hình
Khởi động lại Apache, và kiểm tra xem bạn có thể truy cập ứng dụng từ địa chỉ hoặc tùy vào cấu hình bạn chọn ở mục trước.
Bạn có thể truy cập ứng dụng trên môi trường development:
Thanh web debug toolbar được hiển thị bên góc phải, bao gồm các biểu tượng nhỏ được cung cấp từ sf/ nếu bạn cấu hình đúng.
Subversion
Tốt nhất là sử dụng một công cụ để quản lý phiên bản của mã nguồn khi phát triển một ứng dụng web. Nó cho phép chúng ta:
làm việc với sự tin cậy
chuyển lại phiên bản trước nếu sự thay đổi gây ra lỗi
cho phép nhiều người cùng làm việc trên một project
có thể truy cập tất cả các phiên bản của ứng dụng
Trong mục này, chúng tôi sẽ mô tả cách sử dụng Subversion với symfony. Nếu bạn sử dụng công cụ quản lý mã nguồn khác, nó cũng tương tự như những gì chúng tôi hướng dẫn với Subversion.
Chúng tôi giả sử rằng bạn có quyền truy cập Subversion server.
Đầu tiên, tạo một kho chứa mới cho project jobeet:
$ svnadmin create
$ svn mkdir -m "created default directory structure"
Sau đó, xóa các file trong thư mục cache/ và log/ vì chúng ta không muốn đưa nó lên kho chứa.
$ cd /home/sfprojects/jobeet
$ rm -rf cache/*
$ rm -rf log/*
Bây giờ, chúng ta chmod để chắc chắc rằng chúng ta có quyền ghi vào thư mục cache và logs để web server của bạn có thể ghi vào đó:
$ chmod 777 cache
$ chmod 777 log
Tiếp theo, đưa mã nguồn lên kho chứa:
$ svn import -m "made the initial import" .
Chúng ta không bao giờ muốn commit những file trong thư mục cache/ và /log , nên ta đưa nó vào danh sách cần bỏ qua:
$ svn propedit svn:ignore cache
Text editor mặc định để cấu hình SVN được mở. Subversion phải bỏ qua tất cả nội dung trong thư mục:
Lưu lại vào thoát.
Làm tương tự với thư mục log/:
$ svn propedit svn:ignore log
Cuối cùng, commit những thay đổi lên kho chứa:
$ svn commit -m "added cache/ and log/ content in the ignore list"
Phát triển một dự án với symfony
Mục đích của dự án
Gần đây, người ta nói nhiều về khủng hoảng. Thất nghiệp đang tăng trở lại.
Tôi biết, những lập trình viên symfony không bị ảnh hưởng nhiều và đó là lý do bạn muốn học symfony! Nhưng thật khó để tìm một lập trình viên symfony giỏi.
Bạn có thể tìm một lập trình viên symfony ở đâu? Nơi nào để cho bạn giới thiệu kĩ năng về symfony của mình?
Bạn cần tìm một job board tốt. Thật rộng lớn? Hãy nghĩ lại. Bạn cần một nơi đăng tuyển dụng tập trung. Nơi mà bạn có thể tìm thấy chuyên gia tốt nhất. Nơi mà bạn có thể dễ dàng và nhanh chóng tìm kiếm một công việc hoặc đăng một tuyển dụng.
Không phải tìm ở đâu xa. Jobeet chính là một nơi như thế. Jobeet là một Open-Source job board chỉ làm một thứ, nhưng làm tốt. Nó dễ dàng để sử dụng, chỉnh sửa, mở rộng, và nhúng vào website khác. Nó hỗ trợ đa ngôn ngữ, và tất nhiên sử dụng những công nghệ Web 2.0 mới nhất. Nó cũng cung cấp feeds và API để tương tác với chương trình khác.
Một ứng dụng như vậy đã có chưa? Là người sử dụng, bạn sẽ tìm thấy rất nhiều nơi đăng tuyển dụng như Jobeet trên Internet. Nhưng hãy thử tìm một ứng dụng mã nguồn mở, và đầy đủ tính năng như chúng ta đã mô tả.
Kịch bản của dự án
Trước khi bắt đầu code, chúng ta hãy mô tả một chút về dự án. Phần này sẽ mô tả các tính năng mà chúng tôi muốn có trong phiên bản đầu tiên của project.
Website Jobeet có 4 loại người dùng:
admin: chủ sở hữu website và có tất cả mọi quyền
user: người vào website để tìm kiếm 1 công việc hoặc đăng tuyển dụng
poster: người đăng tuyển dụng
affiliate: người gắn tuyển dụng của Jobeet vào website của anh ta
Project có 2 application: frontend (stories F1 đến F7, bên dưới), nơi người dùng tương tác với website, và backend (stories B1 đến B3), nơi admins quản lý website.
backend được bảo mật và yêu cầu quyền truy cập.
Khi một người dùng vào website Jobeet, cô ta sẽ thấy danh sách các công việc mới nhất. Các công việc được sắp xếp theo category và ngày đưa lên (các công việc mới được đưa lên trên). Với mỗi công việc, chỉ có địa điểm (location), vị trí công việc (position), và tên công ty (company) được hiển thị.
Trong mỗi category, chỉ hiển thị danh sách 10 công việc mới nhất và một link cho phép xem danh sách tất cả các công việc của category đó(Story F2).
Ở trang chủ, người dùng có thể lọc danh sách công việc (Story F3), hoặc đăng tuyển dụng (Story F5).
Khi người dùng clicks vào tên của category hoặc vào link "more jobs" ở trang chủ, anh ta sẽ thấy được tất cả các công việc của category đó được sắp xếp theo ngày tháng.
Danh sách công việc sẽ được phân trang: 20 công việc một trang.
Người dùng có thể nhập một vài từ khóa để tìm kiếm. Từ khóa có thể được tìm theo địa điểm, vị trí công việc, theo category, hoặc tên công ty.
Người dùng có thể chọn một công việc trong danh sách để xem chi tiết.
Người dùng có thể đăng một tuyển dụng. Một công việc cần chứa các thông tin:
Tên công ty
Loại hình công việc (full-time, part-time, hay freelance)
Logo (không bắt buộc)
URL (không bắt buộc)
Vị trí công việc
Địa điểm
Category (người dùng chọn trong danh sách các category có sẵn)
Mô tả công việc (URLs và emails sẽ được tự động link)
Cách ứng tuyển (URLs và emails sẽ được tự động link)
Public (công việc có thể đưa lên websites của affiliate)
Email (email của người gửi)
Người dùng không cần tạo tài khoản cũng có thể đăng tuyển dụng.
Quá trình này được tiến hành qua 2 bước: đầu tiên, người dùng điền vào form các thông tin cần thiết về công việc, sau đó anh ta kiểm tra lại các thông tin bằng cách preview trên trang tuyển dụng.
Mặc dù người dùng không có tài khoản, nhưng vẫn có thể chỉnh sửa thông tin công việc nhờ một URL đặc biệt (dựa vào token cung cấp cho người dùng khi công việc được tạo).
Mỗi công việc sẽ xuất hiện trong 30 ngày (admin có thể sửa giá trị này - xem Story B2). Người dùng có thể kích hoạt lại hoặc tăng thời hạn công việc thêm 30 ngày nữa nhưng chỉ khi công việc đã hết hạn ít nhất 5 ngày.
Người dùng cần đăng kí để trở thành affiliate và cần xác thực để có thể sử dụng Jobeet API. Để đăng kí, anh ta phải cung cấp các thông tin:
Tên
Email
Website URL
Tài khoản affiliate phải được kích hoạt bởi admin (Story B3). Mỗi lần kích hoạt, affiliate sẽ nhận một token qua email để sử dụng API. Khi được chấp nhận, affiliate có thể chọn các công việc trong các categories. Một affiliate có thể nhận danh sách các công việc hiện tại thông qua API với token của anh ta. Danh sách công việc có thể trả về dưới dạng XML, JSON hoặc YAML. Danh sách chứa các thông tin public về công việc. Affiliate cũng có thể giới hạn số công việc trả về, và lọc theo category.
Admin có thể chỉnh sửa các categories trên website.
Anh ta cũng có thể thay đổi:
Số công việc hiển thị ở trang chủ
Ngôn ngữ của website
Thời hạn của công việc
Admin có thể sửa, xóa bất kì công việc nào. Admin có thể tạo và sửa affiliates. Anh ta chịu trách nhiệm kích hoạt tài khoản affiliate hoặc khóa tài khoản đó. Khi admin kích hoạt một tài khoản affiliate mới, hệ thống sẽ tạo một token duy nhất để affiliate sử dụng.
Data model
Để chứa jobs, affiliates, và categories, chúng ta cần một cơ sở dữ liệu quan hệ.
Nhưng symfony là một framework hướng đối tượng, chúng ta muốn thao tác với đối tượng bất cứ khi nào có thể. Ví dụ, thay vì viết câu lệnh SQL để nhận một bản ghi từ cơ sở dữ liệu, ta muốn sử dụng objects.
Thông tin về relational database phải được chuyển thành một object model. Điều đó có thể thực hiện với một ORM tool, symfony cung cấp sẵn 2 công cụ: Propel và Doctrine. Trong hướng dẫn này, chúng ta sẽ sử dụng Propel.
ORM cần thông tin mô tả các bảng và quan hệ giữa chúng để tạo class tương ứng. Có hai cách để tạo một schema mô tả: từ một cơ sở dữ liệu có sẵn hoặc tự tạo nó.
Cơ sở dữ liệu chưa tồn tại và chúng ta muốn cơ sở dữ liệu Jobeet là agnostic, do đó chúng ta tự tạo file schema config/schema.yml:
# config/schema.yml
propel:
jobeet_category:
id: ~
name: { type: varchar(255), required: true }
jobeet_job:
id: ~
category_id: { type: integer, foreignTable: jobeet_category, foreignReference: id, required: true }
type: { type: varchar(255) }
company: { type: varchar(255), required: true }
logo: { type: varchar(255) }
url: { type: varchar(255) }
position: { type: varchar(255), required: true }
location: { type: varchar(255), required: true }
description: { type: longvarchar, required: true }
how_to_apply: { type: longvarchar, required: true }
token: { type: varchar(255), required: true, index: unique }
is_public: { type: boolean, required: true, default: 1 }
is_activated: { type: boolean, required: true, default: 0 }
email: { type: varchar(255), required: true }
expires_at: { type: timestamp, required: true }
created_at: ~
updated_at: ~
jobeet_affiliate:
id: ~
url: { type: varchar(255), required: true }
email: { type: varchar(255), required: true, index: unique }
token: { type: varchar(255), required: true }
is_active: { type: boolean, required: true, default: 0 }
created_at: ~
jobeet_category_affiliate:
category_id: { type: integer, foreignTable: jobeet_category, foreignReference: id, required: true, primaryKey: true, onDelete: cascade }
affiliate_id: { type: integer, foreignTable: jobeet_affiliate, foreignReference: id, required: true, primaryKey: true, onDelete: cascade }
File schema.yml chứa thông tin về tất cả các bảng và cột tương ứng. Mỗi cột được mô tả bao gồm:
type: kiểu dữ liệu (boolean, tinyint, smallint, integer, bigint, double, float, real, decimal, char, varchar(size), longvarchar, date, time, timestamp, blob, và clob)
required: true nếu cột đó là bắt buộc
index: true nếu bạn muốn index cho cột unique nếu bạn muốn unique index cho cột.
Với những cột được set ~ (id, created_at, và updated_at), symfony sẽ tự cấu hình phù hợp (khóa chính với id và timestamp với created_at và updated_at).
Database
Framework symfony hỗ trợ tất cả các sơ sở dữ liệu hỗ trợ PDO (MySQL, PostgreSQL, SQLite, Oracle, MSSQL, ...). PDO là database abstraction layer đi kèm trong PHP.
Chúng ta sử dụng MySQL trong bài hướng dẫn này
$ mysqladmin -uroot -pmYsEcret create jobeet
Chúng ta cần khai báo với symfony cơ sở dữ liệu ta sử dụng cho Jobeet project:
$ php symfony configure:database "mysql:host=localhost;dbname=jobeet" root mYsEcret
Lệnh conf
Các file đính kèm theo tài liệu này:
- Bui_Manh_Khiem_51PM1_516251_DATN_fix.doc