PDF:

Khung công tác PHP, Phần 4: Hỗ trợ Ajax
Các khung công tác Zend, CakePHP và symfony xử lý mã nguyên
sinh và các thư viện của bên thứ ba như thế nào.
Duane O'Brien
Phát triển PHP, Java
自由职业者
07 08 2009
Lời chỉ trích phổ biến đối với các phiên bản ban đầu của khung công tác PHP là chúng không hỗ
trợ các kiến trúc theo phong cách Model-View-Controller (MVC). Ngày nay, các nhà phát triển
có thể chọn từ nhiều khung công tác PHP. Loạt bài viết "Khung công tác PHP" này sẽ xem xét
ba khung công tác PHP được sử dụng rộng rãi — Zend, symfony và CakePHP — khảo sát sự
tương đồng và khác biệt giữa chúng khi ta xây dựng và mở rộng một ví dụ ứng dụng trong mỗi
khung trong ba khung công tác đó. Phần 1 phác ra phạm vi đề cập và giải quyết xong các yêu
cầu cần có trước của loạt bài đăng này. Trong Phần 2, bạn xây dựng các ứng dụng mẫu trong
mỗi khung công tác. Tại Phần 3, bạn sẽ mở rộng ứng dụng và xem xét các trường hợp ngoại lệ
bất quy tắc. Ở đây, ta hãy xem Ajax được hỗ trợ như thế nào trong mỗi khung công tác.
Xem thêm bài trong loạt bài này
Về loạt bài viết này
Loạt bài này được viết dành cho các nhà phát triển PHP, những người muốn bắt đầu sử dụng một
khung công tác, nhưng chưa khảo sát chi tiết các khung công tác có sẵn. Loạt bài này sẽ xem xét
tại sao ba khung công tác đang nói đến lại được lựa chọn, làm thế nào để cài đặt các khung công
tác đó và bạn sẽ xử lý tốt các ứng dụng kiểm thử mà bạn sẽ mở rộng trong mỗi khung công tác. Có
vẻ bạn sẽ có nhiều việc phải làm, nhưng bạn đừng lo — chúng tôi chia nhỏ chúng thành các phần
dễ sử dụng.
Phần 1 của loạt bài này trình bày phạm vi của bài viết, giới thiệu các khung công tác sẽ được nghiên
cứu, trình bày cách cài đặt chúng và phác ra ứng dụng thử nghiệm đầu tiên mà bạn sẽ xây dựng.
(Phù!)
Phần 2 hướng dẫn bạn cách xây dựng ứng dụng mẫu tại mỗi khung công tác, nêu bật sự tương đồng
và những sự khác biệt của chúng.
© Copyright IBM Corporation 2009
Khung công tác PHP, Phần 4: Hỗ trợ Ajax
Nhẫn hiệu đăng ký
Trang 1 của 12
developerWorks®
ibm.com/developerWorks/vn/
Phần 3 bắt đầu với việc mở rộng ứng dụng thử nghiệm, sau đó xử lý các ngoại lệ bất quy tắc. Tất cả
các khung công tác làm việc tốt khi chúng thực hiện những công việc mà chúng đã được thiết kế
để làm. Nhưng phải làm một việc gì đó mà khung công tác không được xây dựng để làm việc này
cũng là điều thường xảy ra trong mọi dự án. Bài viết này xem xét các trường hợp như vậy.
Part 4 tập trung chủ yếu vào hỗ trợ Ajax. Việc sử dụng Ajax, bằng cách sử dụng các mã bản ngữ và
các thư viện của bên thứ ba, sẽ được khảo sát — cụ thể là cách mỗi khung công tác hành xử và
chấp nhận các thư viện phổ biến cụ thể như thế nào.
Phần 5 đề cập đến đến các công việc bên ngoài khung công tác. Một tác vụ duy nhất được xác định
(tập kịch bản lệnh cập nhật hàng đêm) và quá trình hoàn thành tác vụ này được khảo sát tại mỗi
khung công tác.
Về bài viết này
Bài viết này xem xét việc mỗi khung công tác hỗ trợ Ajax như thế nào. Chúng ta mở rộng Blahg để
bổ xung việc xếp hạng thô sơ các bài đã đăng bằng cách sử dụng hỗ trợ Ajax của mỗi khung công
tác, để cho chúng ta có một số trải nghiệm thực tế.
Bạn cần phải đọc xong các Phần 1, Phần 2 và Phần 3, các phần này nói về cách cài đặt, các điều
kiện cần có trước, việc xây dựng các ứng dụng ban đầu và việc mở rộng nó trong mỗi khung công
tác. Nếu bạn chưa đọc các phần đó, bạn nên làm ngay bây giờ.
Ajax trong khung công tác Zend
Khung công tác Zend không có bất kỳ hình thức hỗ trợ Ajax đã tích hợp nào tại thời điểm này. Có
một số thư viện trong khung công tác Zend có thể được sử dụng khi thêm Ajax vào ứng dụng của
bạn, chẳng hạn như Zend_Json và Zend_XmlRpc. Ngoài ra còn có một số thư viện trong khung
công tác Zend có thể trợ giúp cho việc tận dụng lợi thế của các API web hiện có cho các ứng dụng
phổ biến, ví dụ như Flickr. Nhưng nếu bạn muốn thêm một số Ajax vào ứng dụng của bạn trong
khung công tác Zend, bạn phải tự làm điều đó.
Tin xấu là bạn cần phải viết thêm mã để đạt được điều mà bạn muốn.Tin tốt là, do nó không tích
hợp với một thư viện liên quan đến Ajax cụ thể nào, bạn có thể chọn thư viện ưa thích của mình
(hoặc không chọn thư viện nào cả) và xây dựng các chức năng Ajax bằng bất cứ cách nào mà bạn
thấy phù hợp.
Ajax trong khung công tác symfony
Khung công tác symfony được phân phối kèm với Prototype và các thư viện script.aculo.us. Trong
Phần 2, khi chúng ta khởi tạo dự án và sao chép nội dung của thư mục Web vào thư mục /column/
protected/symfony, chúng ta đã di chuyển một bản sao của các thư viện này vào một nơi mà chúng
có thể được sử dụng trong ứng dụng. (Bạn nên kiểm tra lại; các thư viện đó phải ở trong thư mục /
column/htdocs/symfony/sf/prototype/js/ directory.)
Bằng cách cung cấp tích hợp với Prototype, symfony có thể cung cấp một số trình trợ giúp để giảm
bớt số lượng mã cần phải viết để đưa một số Ajax vào Blahg. Nhưng có một mặt trái của sự việc, đó
là: Nếu bạn muốn sử dụng cái gì đó ngoài Prototype, bạn sẽ phải tự làm điều đó.
Khung công tác PHP, Phần 4: Hỗ trợ Ajax
Trang 2 của 12
ibm.com/developerWorks/vn/
developerWorks®
Ajax trong khung công tác CakePHP
Khung công tác CakePHP cung cấp tích hợp cho Prototype và các thư viện script.aculo.us. Chúng
ta cần phải tải về bất kỳ thư viện nào mà chúng ta muốn sử dụng (bạn đặt các thư viện này vào thư
mục /column/htdocs/cakephp/js). Chúng ta thực sự chỉ cần thư viện Prototype để có thể sử dụng
trình trợ giúp Ajax. Thư viện script.aculo.us là để làm cho mọi thứ trở nên ưa nhìn.
Cũng giống như symfony, bằng cách cung cấp tích hợp với Prototype, khung công tác CakePHP
đã làm cuộc sống trở nên dễ dàng hơn một chút khi xây dựng các chức năng Ajax của Blahg. Tuy
nhiên, mặt trái của vấn đề vẫn như vậy: Nếu bạn muốn sử dụng cái gì đó ngoài Prototype, bạn phải
tự làm điều đó. Các trình trợ giúp của Ajax sẽ không giúp đỡ được gì.
Lưu ý: Nếu thư viện ưa thích của bạn là JQuery, thì bạn hãy sử dụng các trình trợ giúp Javascript
của CakePHP. Điều này có thể dẫn đến một số mã đẹp, thú vị, nếu ta thực hiện đúng, nhưng chủ đề
này nằm ngoài phạm vi của bài viết này.
Thiết lập cơ sở dữ liệu
Bắt đầu bằng cách tạo ra một bảng để chứa các xếp hạng. Bạn hãy sử dụng cùng một SQL để tạo
bảng này trong mỗi một trong ba cơ sở dữ liệu
LIệt kê 1. Tạo một bảng để chứa các xếp hạng
CREATE TABLE 'ranks' (
'id' INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
'post_id' INT( 10 ) NOT NULL ,
'rank' INT( 10 ) NOT NULL
) ENGINE = MYISAM ;
Lưu ý: Chúng ta không cần phải có cả một bảng để chỉ chứa các xếp hạng của các bài gửi đăng.
Chúng ta có thể chỉ cần tạo thêm một cột rank trong bảng posts, nếu chúng ta thay đổi, các cột bị
thay đổi sẽ được cập nhật. Chúng ta không muốn các dữ liệu bài gửi đăng bị sửa đổi mỗi khi có ai
đó xếp hạng một bài đăng, và như Blahg đã được thiết kế, cả MySQL lẫn khung công tác sẽ làm
chính thao tác này. Bên cạnh đó, nếu chúng ta muốn làm thêm một số thứ với việc xếp hạng, chẳng
hạn lưu lại số đếm bao nhiêu lần xếp hạng được gửi lên hay lần cuối cùng một bài đã đăng được
xếp hạng là khi nào thì việc tạo một bảng riêng cho các xếp hạng trở nên bắt đầu có ý nghĩa
Thêm xếp hạng các bài đã đăng vào Blahg tại khung công tác Zend
Chúng ta cần phải quyết định sử dụng cái gì để xử lý các yêu cầu Ajax. Chúng ta có thể sử dụng giải
pháp của chúng ta mà không gặp nhiều khó khăn, nhưng vì mục tiêu của bài viết này, mỗi khung
công tác sẽ sử dụng thư viện Prototype (xem phần Tài nguyên). Chúng ta cần phải tạo ra một thư
mục để chứa thư viện này – một thư mục có thể được truy cập qua trình duyệt, chẳng hạn như thư
mục /column/htdocs/zend/scripts/ (đây cũng là thư mục được sử dụng trong kho lưu trữ mã).
Chúng ta cần phải tạo ra một mô hình xếp hạng cơ bản có tên là là Ranks.php. Nó phải là một vỏ
của mô hình như chúng ta đã làm cho bài gửi đăng và các lời bình luận. Và dĩ nhiên, chúng ta phải
tạo ra trình điều khiển xếp hạng. Chúng ta sẽ không tạo ra bất kỳ khung nhìn nào cho nó — trình
điều khiển sẽ chỉ lặp lại các kết quả của bất kỳ yêu cầu xếp hạng nào. Chúng ta cần có hai hành
Khung công tác PHP, Phần 4: Hỗ trợ Ajax
Trang 3 của 12
developerWorks®
ibm.com/developerWorks/vn/
động: hành động readAction sẽ tìm xếp hạng của bài đã đăng, và hành động writeAction sẽ lấy
một đệ trình xếp hạng và kiểm tra xem có hay không một hàng trong bảng ứng với bài đã đăng đó.
Nếu có hàng đó rồi thì hàng đó sẽ được cập nhật với một giá trị mới; nếu chưa có, một hàng mới
sẽ được chèn vào. Dù bằng cách nào đi nữa, hàng mới sẽ được xuất ra, do đó chúng ta có thể cập
nhật xếp hạng trong khung nhìn. Tất cả những điều này khá đơn giản và có thể được tìm thấy trong
kho lưu trữ mã. Bây giờ chúng ta cần phải đưa một số Ajax vào khung nhìn.
Hãy nhớ rằng chúng ta sẽ không thêm bất cứ khung nhìn nào đặc thù cho xếp hạng ở đây. Nhưng
chúng ta sẽ cần phải sửa đổi khung nhìn đọc các bài đăng, nhập thêm mã Ajax vào. Bạn mở tập tin /
column/protected/zend/views/scripts/post/read.php. Đây là nơi mà chúng ta sẽ làm tất cả các công
việc của mình. Đối với trình khởi động, chúng ta cần phải nhập thư viện Prototype ngay từ dòng đầu
tiên: <script type="text/javascript" src="/zend/scripts/prototype.js"></script>.
Trước khi chúng ta viết bất kỳ mã JavaScript nào, ta hãy thêm sẵn trước một số phần tử khác mà
chúng ta cần. Chúng ta cần thứ gì đó để hiển thị xếp hạng hiện tại. Trong phần tử xếp hạng đó,
chúng ta muốn có một thẻ span với một ID để có thể cập nhật các giá trị của xếp hạng khi có yêu
cầu. Có thể thêm như sau, bên dưới nội dung bài đăng: <h4>Rank: <span id="rank"></span></
h4>.
Tiếp theo, chúng ta cần một cặp nút (các liên kết cũng được) mà người sử dụng có thể nhấp
vào để cho biết rằng họ thích hoặc không thích một bài đăng. Ta hãy cung cấp cho chúng
những các tên thông minh và độc đáo. Bạn cần thêm các dòng mã sau bên trong phần tử rank:
<input type='button' onclick='rankUp();' value='Hot' /> or <input type='button'
onclick='rankDown()' value='Not' />.
Để làm cho trường đầu vào ẩn post_id sẵn sàng hơn cho Prototype sử dụng, bạn hãy gán cho
trường này một ID của post_id.
Và cuối cùng, bạn thêm sự kiện onLoad vào phần tử body để lấy được xếp hạng hiện tại: <body
onload='fetchRank();'>.
Không đáng ngạc nhiên khi chúng ta cần phải viết ba hàm JavaScript: rankUp, rankDown và
fetchRank. Các hàm này sẽ thực hiện các yêu cầu Ajax thực tế. Chúng khá đơn giản và trông cũng
gần giống như trong các khung công tác khác. Ta hãy đặt các hàm này trong đoạn <script> thuộc
phần tiêu đê.
Liệt kê 2. Ba hàm JavaScript
function fetchRank() {
var ajax = new Ajax.Request(
'/zend/rank/read',
{
method : 'get',
parameters : {'post_id' : $('post_id').value},
onComplete: parseRank
}
);
}
function rankUp() {
var ajax = new Ajax.Request(
'/zend/rank/write',
Khung công tác PHP, Phần 4: Hỗ trợ Ajax
Trang 4 của 12
ibm.com/developerWorks/vn/
developerWorks®
{
method : 'get',
parameters : {'post_id' : $('post_id').value, 'rank' : '1'},
onComplete: parseRank
}
);
}
function rankDown() {
var ajax = new Ajax.Request(
'/zend/rank/write',
{
method : 'get',
parameters : {'post_id' : $('post_id').value, 'rank' : '-1'},
onComplete: parseRank
}
);
}
Bạn sẽ nhận thấy rằng mỗi hàm gọi hàm parseRank khi hoàn thành. Hàm parseRank này chỉ đơn
giản lấy bất cứ cái gì là đáp ứng của một yêu cầu Ajax và đặt nó vào trong thẻ span của xếp hạng
mà bạn tạo ra trước đó.
Liệt kê 3. Gọi hàm parseRank
function parseRank(trans) {
$('rank').innerHTML = trans.responseText;
}
Khi chúng ta thực hiện tất cả những thay đổi này hoặc nhập khẩu chúng từ kho lưu trữ mã, chúng
ta sẽ có thể đọc một bài đăng trong Blahg và xếp hạng cho bài đăng đó. Thậm chí bạn có thể gian
dối, xếp hạng bài đăng rất nhiều lần. Vậy đó là cách mà chúng ta có thể làm trong khung công tác
Zend. Nhưng chúng ta sẽ làm điều tương tự như thế nào trong khung công tác symfony?
Lưu ý: Có thể sẽ hay hơn nếu ta thực hiện các thao tác với tệp Ajax.Updater hơn là với tệp
Ajax.Request. Bạn hãy thử làm bằng cách tái cấu trúc mã nguồn (refactoring), nếu bạn mới làm
quen với Ajax.
Thêm các xếp hạng bài đăng vào Blahg trong khung công tác
symfony
Để thêm các xếp hạng bài đăng trong khung công tác symfony, ta hãy bắt đầu tại tệp tin
schema.yml (tệp tin này phải nằm tại thư mục /column/protected/sf_column/config) và định nghĩa
bảng ranks.
Liệt kê 4. Thêm các xếp hạng bài đăng trong symfony
ranks :
_attributes: {phpName: Rank }
id:
post_id:
rank:
integer
Hãy nhớ lại: Thụt lùi đầu dòng hai ký tự khoảng trống đối với các xếp hạng và bốn ký tự khoảng
trống đối với định nghĩa trường.
Khung công tác PHP, Phần 4: Hỗ trợ Ajax
Trang 5 của 12
developerWorks®
ibm.com/developerWorks/vn/
Tiếp theo ta sẽ làm gì? Là xây dựng mô hình propel và làm sạch bộ nhớ cache. Hãy nhớ lại dòng
lệnh của symfony tại thư mục /column/protected /sf_column (đây là thư mục gốc của ứng dụng của
bạn).
Liệt kê 5. Xây dựng mô hình propel và làm sạch bộ nhớ cache
php /column/src/symfony/data/bin/symfony propel-build-model
php /column/src/symfony/data/bin/symfony clear-cache
Khi chúng ta chạy những dòng lệnh này, chúng ta sẽ thấy các tệp tin Rank.php và RankPeer.php tại
thư mục /column/protected/sf_column /lib/model. Bây giờ bạn tiếp tục và khởi tởo mô-đun ranks:
php /column/src/symfony/data/bin/symfony init-module blahg rank.
Lớp các hành động xếp hạng (/column/protected/sf_column/apps/blahg/modules/rank/actions/
actions.class.php) sẽ chứa hai hành động: executeRead và executeWrite. Khi xếp hạng được đọc
hoặc được cập nhật, chúng ta xuất in ra xếp hạng, gọi hàm exit khi kết thúc mỗi hành động (điều
này sẽ ngăn không cho symfony tìm kiếm các các khuôn mẫu khung nhìn kết hợp kèm theo mà
chúng ta không cần phải xây dựng.) Hãy xem các hành động đã được viết như thế nào tại kho lưu
trữ mã.
Cuối cùng chúng ta cần phải cập nhật khuôn mẫu readSuccess của post (/column/protected/
sf_column/apps/blahg/modules /post/templates/readSuccess.php) để sử dụng trình trợ giúp
JavaScript của symfony và bao gồm thêm một số liên kết Ajax. Bạn hãy bắt đầu bằng cách thêm
dòng lệnh này vào đỉnh đầu của tệp tin: <?php use_helper('Javascript') ?>. Dòng lệnh này sẽ
bao gồm thêm thư viện Prototype và cung cấp cho chúng ta khả năng truy cập vào một loạt các
trình trợ giúp Ajax. Chúng ta có thể sử dụng một trình trợ giúp để tạo ra lệnh gọi để nạp xếp hạng
ban đầu và một vài liên kết để đệ trình các xếp hạng. Bạn đừng quên là phải thêm một thẻ span để
hiển thị xếp hạng hiện tại.
Liệt kê 6. Tạo một lệnh gọi để nạp xếp hạng ban đầu
<h4>Rank: <span id="rank"></span></h4>
<?php echo javascript_tag(remote_function(array('update' => 'rank',
'url' => 'rank/read?post_id=' . $id))) ?>
<?php echo link_to_remote('Hot', array('update' => 'rank',
'url' => 'rank/write?post_id=' . $id . '&rank=1')) ?> or
<?php echo link_to_remote('Not', array('update' => 'rank',
'url' => 'rank/write?post_id=' . $id . '&rank=-1')) ?>
Đây là tất cả những gì mà chúng ta cần phải làm. Hay nói theo cách khác, chúng ta thực sự không
cần phải viết bất kỳ mã JavaScript nào. Các trình trợ giúp của khung công tác symfony đã làm các
điều đó cho chúng ta. Bạn không tin tôi ư? Bạn hãy làm mọi thứ (hoặc cài đặt các mã từ kho lưu trữ
mã) và đọc một bài đăng tại phiên bản symfony của Blahg. Sau đó bạn xem mã nguồn. Bạn có nhớ
rằng là mình đã viết bất kỳ mã JavaScript nào không?
Thêm các xếp hạng bài đăng trong khung công tác CakePHP
Trước khi bạn bắt đầu thêm việc xếp hạng các bài đăng vào phiên bản CakePHP của Blahg, bạn
phải tải về Prototype và đặt nó vào thư mục /column/htdocs/cakephp/js. Bạn cần phải sửa đổi khuôn
mẫu trình bày mặc định để đưa thư viện Prototype vào phần tiêu đề. Đó là tệp tin Default.ctp trong
Khung công tác PHP, Phần 4: Hỗ trợ Ajax
Trang 6 của 12
ibm.com/developerWorks/vn/
developerWorks®
thư mục /column/protected/cakephp/app/views/layouts/. Bạn thêm dòng lệnh sau vào tiêu đê: <?
php echo $javascript->link('prototype') ?>.
Trước khi bạn có thể sử dụng nó, bạn cần phải tạo ra tệp tin AppController cơ bản bao gồm các
trình trợ giúp JavaScript và Ajax mà bạn sẽ cần sau này. Hãy tạo tệp tin app_controller.php tại thư
mục /column/protected/cakephp/app. Tệp tin này giống như liệt kê 7.
Liệt kê 7. Tạo tệp tin app_controller.php
<?php
class AppController extends Controller {
var $helpers = array('Html', 'Form', 'Javascript', 'Ajax');
}
?>
Lưu ý : Về mặt kỹ thuật, điều này không đúng. Chúng ta có thể sử dụng ngay những trình trợ giúp
này trong các trình điều khiển gửi lên và trình điều khiển xếp hạng, nhưng việc tạo ra trình điều
khiển ứng dụng cơ bản AppController cho phép chúng ta sử dụng chúng trong bất kỳ trình điều
khiển nào mà không cần phải thêm chúng vào danh sách các trình trợ giúp. Đây là cách đúng đắn
để chất tải công việc cho đối tượng AppController cơ sở.
Bây giờ chúng ta cần phải tạo ra một mô hình xếp hạng và trình điều khiển xếp hạng cơ bản. Các
mô hình và trình điều khiển này ít nhiều trông giống các mô hình và trình điều khiển mà chúng ta
đã xây dựng. Khi chúng ta tạo ra mô hình xếp hạng, chúng ta phải thiết lập các quan hệ kết hợp mô
hình giữa các mô hình xếp hạng và mô hình gửi lên. Không thực sự cần phải thêm quan hệ kết hợp
mô hình đến mô hình xếp hạng, trừ khi sau này chúng ta quyết định thêm các chức năng xếp hạng
mạnh hơn. Tại kho lưu trữ mã, cả hai loại quan hệ kết hợp này đã được thiết lập vì vấn đề hình thức.
Trong trình điều khiển xếp hạng, chúng ta muốn có một vài điều mới để giúp giữ cho chúng ta lành
mạnh đúng mức. Chúng ta muốn thêm việc sử dụng thành phần RequestHandler và thêm hàm
beforeFilter. Tại hàm beforeFilter chúng ta kiểm tra thành phần RequestHandler và nếu yêu cầu
là thông qua Ajax, ta hãy tắt các mã gỡ lỗi. Trừ điều này ra, trình điều khiển trông giống như cái mà
bạn mong đợi lúc này. Hai phương thức, đọc và viết, tìm kiếm một post_id và xuất ra xếp hạng.
Lưu ý: Mã của trình điều khiển trong kho lưu trữ mã đơn giản chỉ trả về xếp hạng, nhưng nếu
chúng ta đã tạo ra các lệnh Ajax phức tạp hơn, thì chúng ta có thể tạo ra một khuôn mẫu (chẳng
hạn như tệp views/ranks/viewrank.ctp) và biểu hiện khung nhìn bằng cách sử dụng $this>render('viewrank', 'ajax');. Nhưng vì tất cả những gì mà chúng ta cần là xếp hạng hiện tại, thì
điều đó là quá thừa.
Bây giờ tất cả những gì mà chúng ta cần làm là thêm hiệu ứng bằng thẻ span cho xếp hạng và một
vài liên kết Ajax tới khung nhìn đọc các bài đăng, và như thế là xong.
Liệt kê 8. Thêm phần tử span cho xếp hạng
<h4>Rank: <span id="rank"><?php echo (int) $post['Rank']['rank'] ?></span></h4>
<?php echo $ajax->link('Hot', '/ranks/write/' . $post['Post']['id'] . '/1', array
('update' => 'rank')); ?> or
<?php echo $ajax->link('Not', '/ranks/write/' . $post['Post']['id'] . '/-1', array
('update' => 'rank')); ?>
Khung công tác PHP, Phần 4: Hỗ trợ Ajax
Trang 7 của 12
developerWorks®
ibm.com/developerWorks/vn/
Cái mà các liên kết Ajax này làm về cơ bản là "gọi địa chỉ URL thông qua Ajax và cập nhật phần tử
rank (xếp hạng) trong mô hình tài liệu (DOM) bằng bất cứ cái gì nhận được" (Thật hay là chúng ta
đã tắt các thông điệp báo lỗi). Khi chúng ta đã làm tất cả mọi thứ, bạn hãy tiếp tục gửi lên một bài
đăng và thử. Bạn hãy xem lại mã nguồn và suy nghĩ về tất cả các mã JavaScript mà chúng ta đã
không hề viết ra. Phương pháp này không tiện lợi sao ?
Tóm tắt
Bạn cần phải có một hiểu biết cơ bản về cách thức mà mỗi khung cung cấp (hoặc không cung cấp)
các hỗ trợ cho Ajax. Bạn hãy thử nghiệm với các liên kết Ajax phức tạp hơn và việc này sẽ giúp bạn
tiến lên.
Khung công tác PHP, Phần 4: Hỗ trợ Ajax
Trang 8 của 12
ibm.com/developerWorks/vn/
developerWorks®
Các tải về
Mô tả
Mã ví dụ phần 4
Khung công tác PHP, Phần 4: Hỗ trợ Ajax
Tên
Kích thước
os-php-fwk4.zip
30KB
Trang 9 của 12
developerWorks®
ibm.com/developerWorks/vn/
Tài nguyên
Học tập
• Đọc blog của William Graham để xem ví dụ sử dụng Ajax và Zend: Ajax 101: Một ví dụ đơn
giản về việc sử dụng Ajax với khung công tác Zend.
• Để có một hướng dẫn chỉ cho bạn từng bước làm thế nào để tạo nhanh một ứng dụng
symfony được trang bị các Ajax, xem trang "Các Ajax dễ thao tác tại khung công tác
symfony."
• Đọc sổ tay Khung công tác Zend.
• Đọc các tranh luận của Diễn đàn DevNetwork tại trang Khung công tác Zend và Ajax.
• Để có những bài hướng dẫn tốt về cách sử dụng khung công tác Zend, hãy đọc "Hiểu khung
công tác Zend, Phần 1"
• Một hướng dẫn tốt nữa về khung công tác Zend là "Bắt đầu với khung công tác Zend"
• Tải về Tài liệu hướng dẫn về khung công tác symfony.
• Xem hướng dẫn "Dự án khung công tác symfony đầu tiên của tôi".
• Xem sổ tay Khung công tác CakePHP (Lưu ý: tài liệu này được viết cho CakePHP phiên bản
V1.1. Có thể có một số khác biệt vì bạn đang sử dụng CakePHP phiên bản V1.2).
• Đọc loạt bài gồm năm phần "Chế biến trang web nhanh với CakePHP."
• Xem trang Wikipedia để có cái nhìn khái quát về các khung công tác phần mềm.
• Xem tổng quan về Các kiến trúc MVC tại Wikipedia.
• PHP.net là tài nguyên chủ yếu cho các nhà phát triển PHP.
• Xem mục "Danh sách các bài nên đọc về PHP."
• Duyệt qua tất cả các nội dung về PHP trên developerWorks.
• Phát triển các kỹ năng PHP của bạn bằng cách tham khảo các tài nguyên của dự án PHP trên
trang developerWorks của IBM.
• Để nghe các phỏng vấn và các cuộc thảo luận thú vị cho các nhà phát triển phần mềm, hãy
xem developerWorks podcasts.
• Bạn sử dụng cơ sở dữ liệu với PHP? Hãy thử Zend Core for IBM, đó là một môi trường phát
triển và chạy sản suất PHP liền khối, sẵn để dùng ngay, dễ dàng cài đặt và có hỗ trợ DB2 V9
của IBM.
• Theo dõi sát các sự kiện kỹ thuật và phát tin trên Web của developerWorks.
• Xem thông tin về các hội nghị sắp tới, các triển lãm thương mại, các tin phát trên web, và Các
sự kiện khác trên thế giới đang là mối quan tâm của các nhà phát triển mã nguồn mở của
IBM.
• Xem trang Vùng mã nguồn mở của developerWorks để có nhiều thông tin về các mục “làm
thế nào”, các công cụ và các dự án được cập nhật để giúp bạn phát triển với các công nghệ
mã nguồn mở và sử dụng chúng với các sản phẩm của IBM.
• Theo dõi và tìm hiểu về IBM và các công nghệ mã nguồn mở và các chức năng sản phẩm trên
trang web miễn phí: Trình chiếu theo yêu cầu của developerWorks.
Lấy sản phẩm và công nghệ
• Prototype là một khung công tác JavaScript, nó làm cho việc phát triển các ứng dụng Web
năng động trở nên dễ dàng.
• Tải về khung công tác PHP V5.2.3.
Khung công tác PHP, Phần 4: Hỗ trợ Ajax
Trang 10 của 12
ibm.com/developerWorks/vn/
developerWorks®
• Đổi mới dự án phát triển mã nguồn mở tiếp theo của bạn với các phần mềm dùng thử của
IBM, có sẵn để tải về hoặc trên đĩa DVD.
• Tải về phiên bản đánh giá sản phẩm của IBM, và thực hành các công cụ phát triển ứng dụng
và sản phẩm phần mềm nằm giữa (Middleware) từ DB2®, Lotus®, Rational®, Tivoli® và
WebSphere®.
Thảo luận
• Tham gia vào developerWorks blogs và dành tâm trí cho cộng đồng developerWorks.
• Tham dự Diễn đàn PHP trên developerWorks: Phát triển các ứng dụng PHP với các sản phẩm
quản lý thông tin của IBM (DB2, IDS)..
Khung công tác PHP, Phần 4: Hỗ trợ Ajax
Trang 11 của 12
developerWorks®
ibm.com/developerWorks/vn/
Đôi nét về tác giả
Duane O'Brien
Duane O'Brien là một nhà khoa học máy tính. Ông đã có nhiều bài viết về phát triển
ứng dụng web và về các framework PHP khác nhau. Để tìm hiểu thêm về Duane, bạn
xem trang blogtwitter của ông.
© Copyright IBM Corporation 2009
(www.ibm.com/legal/copytrade.shtml)
Nhẫn hiệu đăng ký
(www.ibm.com/developerworks/vn/ibm/trademarks/)
Khung công tác PHP, Phần 4: Hỗ trợ Ajax
Trang 12 của 12
Similar pages
PDF: