Các lớp trong Zend Framwork

Một phần của tài liệu Xây dựng hệ thống tìm kiếm nội dung trên file văn bản sử dụng Zend Framework. (Trang 29)

Hình 1 .2 Biểu đồ tuần tự một chuỗi MVC đơn giản

Hình 1.7 Các lớp trong Zend Framwork

Sinh viên thực hiện: Trịnh Xuân Lợi Trang 21

1.2.4.1. Zend_Acl

- Cung cấp trọng mọt lượng nhẹ và linh hoạt kiểm soát truy cập danh sách (ACL: “Access Control List”) việc thực hiện đặc quyền quản lý. Nói chung, một ứng dụng có thể sử dụng như ACL để kiểm soát truy cập đến các đối tượng nhất định bảo vệ bởi các đối tượng khác yêu cầu.

- Đối với các mục đích của lớp này:

+ Tài nguyên là một đối tượng truy cập được kiểm soát.

+ Vai trị là một đối tượng có thể yêu cầu truy cập đến một tài nguyên. - Nói một cách đơn giản, vai trị u cầu truy cập vào tài ngun. Ví dụ, nếu một bãi đậu xe tiếp viên yêu cầu truy cập vào một chiếc xe hơi, sau đó tiếp viên bãi đậu xe là vai trị yêu cầu, và chiếc xe là tài nguyên, kể từ khi tiếp cận với chiếc xe không thể được cấp cho tất cả mọi người.

- Thông qua các đặc điểm kỹ thuật và sử dụng một ACL, một ứng dụng có thể kiểm sốt mà ở đây đó là vai trị được cấp quyền truy cập tài nguyên.

1.2.4.2. Zend_Auth

- Zend_Auth cung cấp một API để xác thực và bao gồm bộ điều hợp xác thực cụ thể cho các kịch bản trong trường hợp sử dụng chung.

- Zend Auth là một lớp cung cấp cho chúng ta nhiều phương thức xử lý, giúp chúng ta đơn giản hóa thực hiện q trình chứng thực tài khoản có trong hệ thống ứng dụng. Zend Auth hỗ trợ cho chúng ta trong quá trình đăng nhập, thốt và lấy các thơng tin cần thiết của tài khoản người sử dụng đang đăng nhập. Zend_Auth không là một lớp riêng lẻ mà nó kết hợp giữa các lớp khác nhau như Zend_Db_Table, Zend_Session để hình thành.

* Lưu ý: Các lớp Zend_Auth thực hiện các mơ hình Singleton - chỉ có một

thể hiện của lớp có sẵn thơng qua các phương thức tĩnh getInstance () của nó. Điều này có nghĩa rằng việc sử dụng nhà điều hành mới nà và các từ khóa nhân bản sẽ không làm việc với các lớp Zend_Auth; sử dụng Zend_Auth :: getInstance () để thay thế.

Sinh viên thực hiện: Trịnh Xuân Lợi Trang 22

1.2.4.3. Zend_File

- Zend_File_Transfer cung cấp hỗ trợ rộng rãi cho các tập tin tải lên và tải về. Nó đi kèm với built-in xác nhận cho các tập tin cộng với chức năng thay đổi các tập tin với các bộ lọc.

- Bộ điều hợp giao thức cho phép Zend_File_Transfer tiếp xúc với các API tương tự cho các giao thức vận tải như HTTP, FTP, WebDAV và nhiều hơn nữa.

- Trong lớp này, bạn có một thắc mắc như thế này trong việc làm thế nào để tạo ra và xử lý các hình thức với các thành phần Zend_Form, và trong lớp này đã tăng thêm kiến thức của bạn trong Zend_Form bằng cách áp dụng những kỹ thuật để loại các hình thức khác nhau. Tuy nhiên, có một u cầu khá phổ biến đã khơng được bảo vệ phù hợp để xử lý các tập tin tải lên thơng qua các hình thức.

- Và tất nhiên trong PHP đã hỗ trợ chức năng tải lên tập tin thông qua các hình thức trong nhiều năm, và cung cấp cả hai $ _FILES đặc biệt superglobal và một số tích hợp trong các phương pháp, chẳng hạn như is_uploaded_file () và move_uploaded_file (), để hỗ trợ các nhiệm vụ quản lý các tải lên tập tin an toàn và hiệu quả. Theo Zend Fremawork, tương tự như chức năng có sẵn thơng qua các thành phần Zend_File_Transfer, cung cấp một API chính thức tiếp nhận, xác nhận, và xử lý các tập tin tải lên. Thành phần này cũng làm việc liên tục để xử lý chuyển tập tin khởi động thông qua các yếu tố Zend_Form.

1.2.4.4. Zend_Form

- Zend_Form đơn giản hóa việc tạo ra hình thức và xử lý trong ứng dụng web của bạn. Nó thực hiện các nhiệm vụ sau đây:

+ Lọc và xác nhận yếu tố đầu vào + Yếu tố sắp đặt

+ Yếu tố và mẫu vẽ, bao gồm cả việc thoát khỏi + Yếu tố và các hình thức phân nhóm

+Yếu tố và cấu hình hình thức theo từng cấp

- Zend_Form làm cho việc sử dụng một số thành phần khung Zend để hoàn thành mục tiêu của mình, bao gồm Zend_Config, Zend_Validate, Zend_Filter, Zend_Loader_PluginLoader, và Zend_View tùy chọn.

Sinh viên thực hiện: Trịnh Xuân Lợi Trang 23

- Ngồi ra cịn có một số yếu tố cho form: + button + hidden + image + password + radio + reset + submit + text +textare

+ select (both regular and multi-select types)

+ checkbox (or many checkboxes at once with multiCheckbox)

- Ở đây chúng ta có hai lựa chọn cho việc thêm các yếu tố để tạo thành một: chúng ta có thể khởi tạo các yếu tố cụ thể và vượt qua trong các đối tượng này, hoặc chúng ta có thể vượt qua trong các loại chỉ đơn giản là yếu tố và có Zend_Form khởi tạo một đối tượng của loại chính xác cho chúng ta.

1.2.4.5. Zend_Db

Dựa trên đối tuợng PDO (PHP Data Objects), cung cấp cách thức giao tiếp với database.

 Khởi tạo Zend_Db

$db=Zend_Db::factory(‘Pdo_Mysql’,

array(‘host’=>’localhost’,’usename’=>’root’,’password’=>’’,’dbname ’=>’name_database’));

setFetchMode(Sconstant)

- FETCH_OBJ: Trả kết quả truy vấn thành các đối tượng.

- FETCH_ASSOC: Trả kết quả truy vấn thành những mảng liên tục, giữ

nguyên tên của field.

- FETCH_NUM: Trả kết quả truy vấn thành mảng,tên field sẽ được

chuyển thành số liên tục.

- FETCH_BOTH: Trả kết quả truy vấn thành mảng, bao gồm kết quả của

hai kiểu:FETCH_NUM và FETCH_ASSOC.

Ví dụ: Chuyển kết quả truy vấn thành một mảng chứa các tên fiel.

$db->setFetchMode(Zend_Db::FETCH_OBJECT);

Sinh viên thực hiện: Trịnh Xuân Lợi Trang 24

Là phương thức fetchAssoc tương tự giống nhue fellAll là phương thức để lấy dữ liệu từ database nhưng nó sẽ trả về một mảng dữ liệu cho dù setFetchMode() ở chế độ nào đi nữa.

Tham số:

$sql: Câu lệnh truy vấn.

$bin: Mảng giá trị truyền vào khi truy vấn.

 fetchCol($sql,$bin):

Là phương thức để lấy dữ liệu trong database nhưng nó trả về giá trị của field đầu tiên trong kết quả truy vấn.

 fetchCol($sql,$bin):

Là phương thức để lấy dữ liệu trong database nhưng nó trả về giá trị của field thứ 2 trong kết quả truy vấn.

 fetchCol($sql,$bin):

Là phương thức để lấy dữ liệu trong database nhưng nó trả về giá trị của một dịng duy nhất.

 fetchOne($sql,$bin):

Là phương thức để lấy dữ liệu trong database nhưng nó trả về một giá trị duy nhất.

 insert($table,$bind):

Là phương thức để đưa một dữ liệu vào database.

 lastInsertId($table,$primaryKey):

Là phương thức lấy ID của một record vừa được thêm vào bằng phương thức insert()

Tham số:

$primaryKey: Khóa chính của bảng.

update($table,$data,$where):

Là phương thức để cập nhật dữ liệu vào database.

Tham số:

$table: Tên bảng.

$data: Mảng giá trị đưa vào database. $where: Điều kiện để cập nhật.

Sinh viên thực hiện: Trịnh Xuân Lợi Trang 25

1.2.4.6. Zend_View

- Zend_View là lớp làm việc cho phần View trong mơ hình cấu trúc MVC.Tức là nó tồn tại để giữ View script tách khỏi Model và Controller scripts.

- Nó cịn cung cấp một hệ thống helpers, filters, và variable escaping.

- Zend_View cho phép chúng ta chia cắt chương trình và giao nhiệm vụ hiển thị giao diện theo mỗi phương thức Action đó, nghĩa là mỗi Action này sẽ đi với một trang hiển thị ra trình duyệt.

- Về bản chất, q trình này có 2 bước chính :

+ Script Controller của bạn sẽ tạo một thể hiện của Zend_view và gán các biến mà nó thể hiện.

+ Controller sẽ yêu cầu Zend_View giao trả một View riêng để sinh mã đưa ra ngoài bằng cách giao quyền điều khiển cho view sript. Trang được giao trả này bao gồm tất cả các thứ như HTTP, headers, phần body cũng như mọi exceptions có liên quan đến cách dùng qua hệ thống MVC. Front Controller có nhiệm vụ tự động gởi các thơng tin của header, kế đến nội dung (body content) và cuối cùng kích họat để chạy chương trình (dispath).

1.2.4.7. Zend_Controller

- Giúp lấy các request từ phía Client và thực thi nó bằng các Action. - Các thành phần của Zend Controller (ZC):

- Zend_Controller_Front: Dàn xếp, bố trí tồn bộ dịng xử lí của ZC. Nó xử lý tất cả các request đến server và chịu trách nhiệm chuyển request tới actionController. (Zend_Controller_Action)

- Zend_Controller_Request_Abstract: Thường được hiểu là đối tượng

Request, set và get tên controller, tên action, các tham số, môi trường …v.v.

- Zend_Controller_Router_Interface: Dùng để định nghĩa router. Mặc định

Zend_Controller_Router_Rewrite sẽ được dùng.

- Zend_Controller_Dispatcher_Interface: Dùng để định nghĩa Dispatcher. Dùng để ánh xạ những controller và action từ đối tượng request tới những lớp và phương thức tương ứng. Mặc định Zend_Controller_Dispatcher_Standard được dùng, nó định nghĩa cách ánh xạ những controller như những lớp được đặt tên theo

Sinh viên thực hiện: Trịnh Xuân Lợi Trang 26

cú pháp MixedCase, còn action như những phương thức được đặt tên theo cú pháp camelCase

- Zend_Controller_Action: Định nghĩa action cơ bản cho controller. Mỗi controller phải được mở rộng từ lớp này để định nghĩa các action.

- Zend_Controller_Response_Abstract: Định nghĩa lớp response dùng để chọn lọc và trả về reponse từ action. Mặc định là lớp được dùng cho môi trường HTTP đó là Zend_Controller_Response_Http.

* Tóm lại: Request được nhận bởi Zend_Controller_Front, Zend_Controller_Front sẽ gọi Zend_Controller_Router_Rewrite để chọn controller và action để dispatch. Zend_Controller_Router_Rewrite sẽ phân tích URI để biết tên của controller và action. Zend_Controller_Front sau đó thực hiện vịng lặp dispatch. Nó gọi Zend_Controller_Dispatcher_Standard để gửi request tới controller và action. Sau khi controller xử lí xong nó trả về cho Zend_Controller_Front. Quá trình kết thúc.

1.2.4.8. Zend_Application

- Zend_Application cung cấp một cơ sở bootstrapping cho các ứng dụng, cung cấp các nguồn tài nguyên có thể tái sử dụng, các lớp học chung và dựa trên module bootstrap và kiểm tra phụ thuộc. Nó cũng sẽ chăm sóc thiết lập mơi trường PHP và giới thiệu tự động load theo mặc định.

- Zend_Application được chia làm 3 thành phần chính: + File application.ini

+ Zend_Application_Bootstrap + File bootstrap.php

1.2.4.9. Zend_Mail

- Zend_Mail cung cấp chức năng tổng quát để có thể soạn và gửi cả văn bản và tuân thủ multipart MIME-e-mail. Mail có thể được gửi đi với Zend_Mail qua mặc định

- Zend_Mail được vận chuyển và qua người dùng bởi hình thức sử dụng như sau: Zend_Mail_Transport_Sendmail vận chuyển hoặc qua Zend_Mail_Transport Smtp.

Sinh viên thực hiện: Trịnh Xuân Lợi Trang 27

Ví dụ:

Một e-mail đơn giản bao gồm một số người nhận, một chủ đề, một nội dung và người gửi. Để gửi mail sử dụng Zend_Mail_Transport_Sendmail, làm như sau:

$mail = new Zend_Mail();

$mail->setBodyText ('This is the text of the mail.'); $mail->setFrom('somebody@example.com', 'Some Sender');

$mail->addTo('somebody_else@example.com', 'Some Recipient'); $mail->setSubject('TestSubject');

$mail->send();

Lưu ý: Để gửi một e-mail với Zend_Mail bạn phải chỉ định ít nhất một người nhận, người gửi (ví dụ, với setFrom ()), và nội dung một tin nhắn (văn bản và / hoặc HTML).

1.2.4.10. Zend_Search_Lucene

Zend_Search_Lucene là một mục đích chung trong văn bản là một cơng cụ tìm kiếm được viết hồn tồn bằng PHP 5. Nó chứa các index của nó trên hệ thống tập tin và không yêu cầu một máy chủ cơ sở dữ liệu, nó có thể thêm khả năng tìm kiếm hầu như bất kỳ trang web PHP-driven. Zend_Search_Lucene hỗ trợ các tính năng sau đây:

- Tìm kiếm xếp hạng kết quả trả về

- Nhiều loại truy vấn mạnh mẽ: cụm từ truy vấn, truy vấn boolean, ký tự đại diện các truy vấn, truy vấn gần, phạm vi truy vấn và nhiều người khác.

- Tìm kiếm theo lĩnh vực cụ thể (ví dụ, tiêu đề, tác giả, nội dung) Zend_Search_Lucene bắt nguồn từ dự án Apache Lucene.

Lưu ý:

- Triển khai thực hiện Zend_Search_Lucene trước đây hỗ trợ các Lucene 1,4 (1,9) - 2.1 các định dạng index..

- Bắt đầu từ Zend Fremawork 1.5, bất kỳ index được tạo ra bằng cách sử dụng định dạng index trước 2.1 được tự động nâng cấp lên Lucene 2.1 định dạng sau khi cập nhật Zend_Search_Lucene và sẽ khơng tương thích với Zend_Search_Lucene triển khai vào Zend Fremawork 1.0.x.

Sinh viên thực hiện: Trịnh Xuân Lợi Trang 28

1.2.4.11. Ngồi ra cịn có một số lớp cơ bản khác như:

- Zend_Cache: Giúp cho các ứng dụng không phải sử dụng CPU hoặc truy

xuất vào database quá nhiều

- Zend_Currency: Xử lý tất cả các vấn đề liên quan đến tiền tệ - Zend_Date: Xử lý tất cả các vấn đề liên quan thời gian - Zend_Feed: Xử lý với Rss và Atom feeds

- Zend_Filters: Lọc dữ liệu trước khi thực hiện một quá trình xử lý nào đó - Zend_Local: Là một thư viện trả lời cho câu hỏi làm sao ứng dụng có thể

sử dụng trên toàn thế giới

- Zend_Translate: Là giải pháp cho các ứng dụng đa ngôn ngữ

- Zend_Validate: Dùng để kiểm tra dữ liệu nhập vào có phù hợp với yêu cầu

hay không

1.3. Sử dụng công nghệ full text search để xây dựng hệ thống tìm kiếm thơng tin trên văn bản tin trên văn bản

1.3.1. Giới thiệu về công nghệ full text search

- Với việc dữ liệu do con người tạo ra ngày càng phong phú, nhu cầu tìm kiếm thơng tin ngày càng bức thiết và đa dạng, dẫn đến sự ra đời của nhiều công cụ hỗ trợ tìm kiếm. Trong lĩnh vực tìm kiếm, người ta tạm chia dữ liệu thành hai loại chính, dữ liệu có cấu trúc (structured data) và dữ liệu phi cấu trúc (unstructured data).

- Dữ liệu có cấu trúc thường dùng để chỉ dữ liệu lưu trữ trong các hệ quản trị cơ sở dữ liệu quan hệ như MS SQL server hay MySQL, trong đó các thực thể và các thuộc tính được định nghĩa sẵn. Ví dụ, dữ liệu của một thí sinh dự thi đại học có thể bao gồm các thông in như Họ tên, Năm sinh, Trường dự thi, Điểm thi các môn.

- Dữ liệu phi cấu trúc thường dùng để chỉ dữ liệu ở dạng tự do (free type) và khơng cần có cấu trúc định nghĩa sẵn. Các trang web, video, ảnh, âm thanh là các ví dụ của dữ liệu phi cấu trúc (Thơng thường, nếu khơng nói chi tiết, dữ liệu phi cấu trúc được hiểu là dữ liệu phi cấu trúc dạng văn bản).

Sinh viên thực hiện: Trịnh Xuân Lợi Trang 29

- Nếu dùng các hệ quản trị cơ sở dữ liệu quan hệ như MS SQL Server hay MySQL để lưu trữ dữ liệu phi cấu trúc, việc truy tìm dữ liệu theo danh sách từ khóa sẽ gặp các hạn chế sau:

+ Bị giới hạn ở cú pháp của ngôn ngữ SQL. Ví dụ muốn tìm các trang web nói về Cần Thơ, phải chỉ rõ Cần Thơ trong câu truy vấn, nếu dùng "Can Tho" (vì nghĩ có thể sử dụng tiếng Việt khơng dấu), kết quả sẽ hồn toàn khác.

+ Tốc độ chậm khi tìm kiếm gần đúng (dùng LIKE) trong cơ sở dữ liệu lớn. Các hệ quản trị cơ sở dữ liệu quan hệ không được thiết kế để làm việc hiệu quả cho trường hợp người dùng muốn thực hiện các câu truy vấn như: Tìm các tài liệu về các ngành đào tạo của đại học Cần Thơ, trừ ngành Nông nghiệp và ngành Công nghệ thông tin.

+ Điều này đã thúc đẩy cho sự ra đời của các hệ thống hỗ trợ tìm kiếm theo danh sách từ khóa cho dữ liệu phi cấu trúc (full text search - tạm dịch là tìm kiếm tồn văn). Điển hình nhất cho các hệ thống này là các máy tìm kiếm như Google và Yahoo. Gần đây các hệ quản trị cơ sở dữ liệu quan hệ như MS SQL Server và MySQL đều có thêm chức năng hỗ trợ tìm kiếm tồn vẹn cho dữ liệu văn bản mà chúng lưu trữ.

1.3.2. Mã nguồn mở Lucene

Lucene là một thư viện cung cấp các hàm cơ bản hỗ trợ tìm kiếm thơng tin, nó có khả năng xử lý và mở rộng ở mức cao, cho phép chúng ta có thể tích hợp vào các ứng dụng, nguyên thủy của nó được phát triển trên nền tảng java, hiện hay đã được phát triển với nhiều ngôn ngữ khác như Perl, C#, Ruby, Php,…. Dữ liệu để tìm kiếm có thể là tập hợp các tập tin dạng Pdf, Word hay các trang web HTML, hoặc là các dữ liệu lưu trữ trong các hệ quản trị cơ sở dữ liệu như MS SQL, MySQL.

Các thành phần chức năng chính của Lucene gồm các thành phần sau:

(1) Thành phần mô tả đối tượng cần đánh chỉ mục.

Lucene coi mỗi đối tượng cần đánh chỉ mục là một Document. Mỗi Document có thể có nhiều Field, mỗi Field tương ứng một thuộc tính của đối tượng

Một phần của tài liệu Xây dựng hệ thống tìm kiếm nội dung trên file văn bản sử dụng Zend Framework. (Trang 29)

Tải bản đầy đủ (PDF)

(95 trang)