Bạn đang cần phải đưa ra quyết định sử dụng framework nào cho dự án mới của mình? Trong bài viết này, Tuts+ sẽ đi sâu vào lý do tại sao Zend Framework hoàn toàn xứng đáng trở thành là framework PHP của bạn.
Bài viết này sẽ đưa ra mười lý do tại sao bạn nên sử dụng Zend Framework cho dự án mới, hoặc thậm chí dự án hiện có của mình và hy vọng rằng điều này sẽ giúp bạn đưa ra quyết định một cách sáng suốt.
Mục lục
- Lý do 1. Zend Framework mở rộng các Class nhiều nhất có thể
- Lý do 2. Tái sử dụng các đối tượng hiệu quả
- Lý do 3. Chỉ quan tâm những gì bạn cần sử dụng
- Lý do 4. Zend Framework giúp bạn làm được rất nhiều thứ!
- Lý do 5. Đừng triển khai mô hình có sẵn – Hãy chọn cuộc phiêu lưu của riêng bạn!
- Lý do 6. Zend Framework tích hợp bất cứ điều gì bạn muốn!
- Lý do 7. Hướng dẫn và Tiêu chuẩn
- Lý do 8. All Code is Guilty Until Proven Innocent (hay Phát triển hướng kiểm thử TDD)
- Lý do 9. Cộng đồng và Tài liệu
- Lý do 10. Chứng nhận Ahoy!
- Nhược điểm của Zend Framework
Lý do 1. Zend Framework mở rộng các Class nhiều nhất có thể
Khái niệm Zend Framework là một framework lập trình hướng đối tượng toàn bộ và như vậy, nó sử dụng rất nhiều khái niệm hướng đối tượng ( Object-Oriented ) như sự kế thừa và giao diện. Điều này làm cho hầu hết, nếu không phải tất cả, các thành phần của ZF có thể mở rộng đến một mức nhất định. Nó cho phép các nhà phát triển triển khai các biến thể đặc biệt của riêng họ đối với các thành phần riêng lẻ mà không cần phải xâm nhập vào chính cơ sở mã ZF. Có thể tùy chỉnh ZF theo cách này cho phép bạn tạo chức năng phù hợp nhất và duy nhất cho dự án của mình, nhưng do tính chất hướng đối tượng của nó, bạn cũng có thể sử dụng chức năng này trong các dự án khác.
Ví dụ
Zend Framework có thành phần Xác thực rất rộng, bạn có thể sử dụng thành phần này để xác thực dữ liệu từ các biểu mẫu. Trong ZF, các biểu mẫu cũng được coi là đối tượng và được đại diện bởi thành phần Zend_Form.
Giả sử rằng bạn muốn tạo trình xác thực URL tùy chỉnh để hạn chế nhập URL từ người dùng. Cách nhanh nhất để làm điều này là chỉ cần xác nhận đầu vào bằng cách sử dụng một dòng lệnh giống như dưới đây:
$isValid = filter_var($submitted_url, FILTER_VALIDATE_URL);
Nhưng điều này không tuân theo bản chất OO của các đối tượng biểu mẫu, vì nó không được sử dụng trong ngữ cảnh của biểu mẫu. Để giải quyết vấn đề này, chúng ta có thể tạo một class Zend_Validator mới bằng cách mở rộng class Zend_Validate_Abstract:
<?php
class Zend_Validate_Url extends Zend_Validate_Abstract
{
const INVALID_URL = ‘invalidUrl’;
protected $_messageTemplates = array(
self::INVALID_URL => “‘%value%’ is not a valid URL.”,
);
public function isValid($value)
{
$valueString = (string) $value;
$this->_setValue($valueString);
if (!Zend_Uri::check($value)) {
$this->_error(self::INVALID_URL);
return false;
}
return true;
}
}
Cách này sử dụng class Zend_Uri, class này đã chứa phương pháp kiểm tra URL mà chúng ta có thể sử dụng. Nhưng vì không mở rộng class Zend_Validate_Abstract, nên chúng tôi đã triển khai một gói class mà sẽ thực hiện class trừu tượng cần thiết. Điều này cho phép chúng ta sử dụng chức năng kiểm tra URL Zend_Uri trong các đối tượng Zend_Form như sau:
<?php
class Form_Site extends Zend_Form
{
public function init()
{
$this->setMethod(‘POST’);
$this->setAction(‘/index’);
$site= $this->createElement(‘text’, ‘siteurl’);
$site->setLabel(‘Site URL’);
$site->setRequired(true);
// Adding the custom validator here!
$site->addValidator(new Zend_Validate_Url());
$this->addElement($site);
$this->addElement(‘submit’, ‘sitesubmit’, array(‘label’ => ‘Submit’));
}
}
Nếu muốn kiểm tra xem URL của mình có phải là URL video YouTube hợp lệ hay không, chúng ta có thể làm như sau:
<?php
class Zend_Validate_YouTubeUrl extends Zend_Validate_Abstract
{
const INVALID_URL = ‘invalidUrl’;
protected $_messageTemplates = array(
self::INVALID_URL => “‘%value%’ is not a valid URL.”,
);
public function isValid($value)
{
$valueString = (string) $value;
$this->_setValue($valueString);
if (strpos($value, “//www.youtube.com/watch?v=”) !== 0) {
$this->_error(self::INVALID_URL);
return false;
}
return true;
}
}
Nếu thêm các lệnh này vào đối tượng biểu mẫu trang web để làm trình xác thực, nó sẽ đảm bảo rằng tất cả các URL được gửi đều bắt đầu bằng tiền tố URL video YouTube chính xác.
Lý do 2. Tái sử dụng các đối tượng hiệu quả
Trong Zend Framework, mọi thứ đều được coi là một đối tượng, như đã được chứng minh bằng ví dụ của chúng tôi ở trên. Điều này có một số bất lợi riêng, chẳng hạn như làm cho việc viết mã trở nên phức tạp hơn. Tuy nhiên, lợi thế chính của nó là khả năng làm cho mã có thể tái sử dụng và vì không ai thích viết đi viết lại cái gì cả, nên điều này rất có lợi.
Ví dụ
Chúng ta đã có lớp Zend_Validate_Url và Form_Site từ ví dụ ở trên, vì vậy hãy sử dụng lại chúng trong ví dụ này.
<?php
class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
$siteform = new Form_Site();
if( $this->_request->isPost() && $siteform->isValid($this->_request->getPost()) ) {
//stuff to do if the input is correct
$this->_redirect(“/index/correct”);
}
$this->view->siteform = $siteform;
}
public function correctAction()
{
// Yay, we’re re-using our Form_Site object!
$this->view->siteform = new Form_Site();
}
Đây là giao diện trên trình duyệt:
Nếu bạn đã thử gửi một URL không hợp lệ, bạn có thể thấy trình xác thực URL hoạt động ra sao:
Bạn có thể thấy điều gì sẽ xảy ra nếu nhập một URL hợp lệ ở đây:
Như bạn có thể thấy, chúng ta không cần phải lặp lại mã đối tượng biểu mẫu.
“Các lớp Zend_Validate cũng có thể được sử dụng theo những cách khác, không chỉ trong ngữ cảnh của các lớp Zend_Form. Bạn chỉ cần khởi tạo một lớp Zend_Validate và gọi phương thức là Valid ($ tham số), rồi gán cho nó giá trị bạn muốn xác thực.”
>> Xem thêm: Top 5 Nền Tảng Thương Mại Điện Tử Hàng Đầu Cho Doanh Nghiệp
Lý do 3. Chỉ quan tâm những gì bạn cần sử dụng
Về mặt thiết kế, Zend Framework chỉ đơn giản là một tập hợp các lớp. Thông thường, bạn sẽ sử dụng các thành phần Zend MVC để tạo một dự án ZF đầy đủ chức năng, nhưng trong các trường hợp khác, bạn chỉ có thể tải các thành phần bạn cần. ZF được tách riêng từng phần, vì thế chúng ta có thể tận dụng các thành phần dưới dạng các thư viện riêng lẻ, thay vì toàn bộ framework.
Nếu bạn đã xem các bài viết về framework khác, có thể bạn đã nghe đến thuật ngữ glue framework. ZF được mặc định là glue framework. Bản chất tách rời của nó giúp bạn dễ dàng sử dụng làm “keo” cho ứng dụng đã có của mình.
“Việc sử dụng các glue framework hay các full-stack framework đã dấy lên một cuộc tranh luận. Full-stack framework là những framework cung cấp cho bạn mọi thứ bạn cần cho dự án của mình, chẳng hạn như triển khai ORM, tạo mã hoặc scaffolding. Full-stack framework giúp bạn không cần mất nhiều công sức để tạo một dự án, nhưng lại thiếu tính linh hoạt, vì nó áp đặt các quy ước nghiêm ngặt cho dự án của bạn.”
Ví dụ
Giả sử bạn cần tìm một cách để truy xuất thông tin về một video cụ thể trên YouTube. Zend_Gdata_Youtube là một thành phần ZF cho phép bạn truy cập dữ liệu từ YouTube thông qua API GData. Lấy thông tin video đơn giản như sau:
//Make sure you load the Zend_Gdata_Youtube class, this assume ZF is in your PHP’s include_path
include_once “Zend/Gdata/Youtube.php”;
$yt = new Zend_Gdata_YouTube();
// getVideoEntry takes in the YouTube video ID, which is usually the letters at the end
// of a YouTube URL e.g. //www.youtube.com/watch?v=usJhvgWqJY4
$videoEntry = $yt->getVideoEntry(‘usJhvgWqJY4’);
echo ‘Video: ‘ . $videoEntry->getVideoTitle() . “<br />”;
echo ‘Video ID: ‘ . $videoEntry->getVideoId() . “<br />”;
echo ‘Updated: ‘ . $videoEntry->getUpdated() . “<br />”;
echo ‘Description: ‘ . $videoEntry->getVideoDescription() . “<br />”;
echo ‘Category: ‘ . $videoEntry->getVideoCategory() . “<br />”;
echo ‘Tags: ‘ . implode(“, “, $videoEntry->getVideoTags()) . “<br />”;
echo ‘Watch page: ‘ . $videoEntry->getVideoWatchPageUrl() . “<br />”;
echo ‘Flash Player Url: ‘ . $videoEntry->getFlashPlayerUrl() . “<br />”;
echo ‘Duration: ‘ . $videoEntry->getVideoDuration() . “<br />”;
echo ‘View count: ‘ . $videoEntry->getVideoViewCount() . “<br />”;
Mã này sẽ xuất ra:
Một điều cần lưu ý ở đây: thành phần Zend Framework (GData) này là thư viện PHP chính thức được Google xác nhận để truy cập API của nó. Bản chất tách rời của framework cho phép chúng ta sử dụng thành phần trong bất kỳ dự án nào, bất kể chúng ta sử dụng framework nào.
Lý do 4. Zend Framework giúp bạn làm được rất nhiều thứ!
Một trong những điều thú vị nhất về Zend Framework là nó có RẤT NHIỀU thành phần. Cần tìm một cách để xác thực người dùng? Sử dụng Zend_Auth. Cần kiểm soát quyền truy cập vào tài nguyên của bạn? Tra cứu Zend_Acl. Cần tạo một số biểu mẫu? Chúng ta có Zend_Form. Cần đọc một nguồn cấp RSS? Bạn có thể sử dụng Zend_Feed. Về cơ bản nó như là con dao đa năng Thụy Sĩ của các lớp PHP!
Zend đi kèm với một số bản xem trước cho thấy cách sử dụng các thành phần khác nhau của nó:
Để xem những thứ này, cách tốt nhất là chỉ cần tải xuống Phiên bản đầy đủ của Zend Framework và kiểm tra chúng trên máy của bạn.
Để có danh sách đầy đủ của tất cả các thành phần, bạn có thể xem Hướng dẫn sử dụng Zend Framework.
Lý do 5. Đừng triển khai mô hình có sẵn – Hãy chọn cuộc phiêu lưu của riêng bạn!
Đây thực sự là một trong những lý do khiến hầu hết các nhà phát triển không sử dụng Zend Framework – nó không có các mô hình triển khai có sẵn (Model implementation). Model chính là M trong MVC, viết tắt của “Model-View-Controller”, một kiến trúc lập trình được hầu hết các PHP Framework sử dụng.
Điều đó có nghĩa là Zend Framework chỉ là một “VC” Framework?
Đúng và sai.
Đúng, đó là một VC Framework vì nó không có Mô hình triển khai có sẵn. Điều này khiến một số người khó sử dụng ZF, đặc biệt nếu họ sử một framework có Mô hình triển khai có sẵn (như CakePHP, Symfony hoặc thậm chí là Ruby on Rails).
Mặt khác, không, nó cũng là một MVC Framework, vì ngoài việc cung cấp các cách chung để truy cập cơ sở dữ liệu (sử dụng Zend_Db), nó thực sự vẫn dựa trên một số kiểu triển khai mô hình. Điều khác biệt là nó để lại kiểu triển khai này cho nhà phát triển – điều mà một số người cho rằng nên như vậy vì các mô hình chính xác là nơi chứa logic nghiệp vụ của ứng dụng và do đó, chúng không phải là thứ có thể được phát triển như một thành phần chung. Zend Framework Philosophy tuyên bố rằng việc triển khai mô hình là độc nhất đối với từng dự án, không thể tạo ra một triển khai trừu tượng cho dự án vì chúng không thực sự biết bạn cần gì. Họ tin rằng các mô hình nên được thực hiện bởi chính các nhà phát triển.
Tại sao đây lại là một điều tốt?
Không có Mô hình triển khai có sẵn có nghĩa là nhà phát triển có thể tự do sử dụng bất kỳ phương tiện nào họ có để triển khai nó, hoặc thậm chí chỉ tích hợp các triển khai hiện có. Không có các hạn chế được xác định trước, nhà phát triển sau đó được phép tạo các triển khai phức tạp hơn, thay vì chỉ biểu diễn các bảng đơn giản, đó là cách các triển khai Mô hình thông thường được tạo. Mô hình chứa logic kinh doanh của bạn. Chúng không nên bị hạn chế bởi các bảng cơ sở dữ liệu; thay vào đó, chúng nên chỉ định kết nối của các bảng này với nhau. Điều này cho phép bạn đặt hầu hết mã lập trình của mình vào Mô hình, do đó đáp ứng mô hình “Thin Controllers, Fat Models” của MVC.
Vậy sử dụng Zend Framework như thế nào nếu không biết cách tạo các mô hình của riêng mình?
Đối với người mới bắt đầu, hướng dẫn Zend Framework Quickstart cho chúng ta thấy cách để triển khai các mô hình. Trong hướng dẫn này, họ triển khai cách tiếp cận ORM cho các mô hình, trong đó bạn sẽ tạo ba tệp tin Mô hình thực tế, là một đại diện trừu tượng của đối tượng của bạn; một Mapper, ánh xạ dữ liệu từ cơ sở dữ liệu đến Mô hình của bạn; và một đối tượng Bảng Cơ sở dữ liệu, được sử dụng bởi trình ánh xạ để lấy dữ liệu. Bạn có thể xem mã trong hướng dẫn Khởi động nhanh ZF, vị trí mà họ đã sử dụng cách tiếp cận này để triển khai mô hình của ứng dụng Sổ lưu bút đơn giản.
Đối với những người thắc mắc “Tại sao tôi phải tự viết mã cái này trong khi đang sử dụng các framework ?”, Đây là một giả thuyết hoàn hảo cho lý do tiếp theo của tôi …
Lý do 6. Zend Framework tích hợp bất cứ điều gì bạn muốn!
Bản chất tách rời của Zend Framework giúp bạn dễ dàng tích hợp các thư viện khác mà bạn muốn sử dụng. Giả sử bạn muốn sử dụng Smarty làm hệ thống tạo khuôn mẫu của mình. Nó có thể được thực hiện đơn giản bằng cách tạo một lớp gói cho Zend_View_Abstract, lớp này sử dụng Smarty để hiển thị dạng xem.
Điều này hoạt động theo cả hai cách, vì bạn cũng có thể tích hợp ZF vào các thư viện khác. Ví dụ, bạn có thể tích hợp ZF vào Symfony. Họ đang lên kế hoạch làm điều này với Symfony 2, sử dụng các thành phần Zend_Cache và Zend_Log từ ZF.
Ví dụ
Đối với ví dụ này, Tuts+ sẽ thử sử dụng Doctrine để triển khai Mô hình. Tiếp tục từ ví dụ trang web ở trên, giả sử bạn đã triển khai bảng DB của mình như sau:
CREATE TABLE `site` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`url` varchar(100) CHARACTER SET latin1 NOT NULL,
PRIMARY KEY (`id`)
);
Để tích hợp Doctrine vào ZF, chúng ta sẽ phải đảm bảo rằng các cài đặt thích hợp đã được xác định. Tuts+ đã thực hiện theo hướng dẫn này từ dev.juokaz.com về cách sử dụng Doctrine với ZF.
Giả sử mọi thứ đều hoạt động tốt, bạn sẽ chỉ phải tạo các tệp mô hình của mình bằng cách chạy tệp php doct-cli.php từ hướng dẫn như sau:
php doctrine-cli.php generate-models-db
Bạn sẽ thấy thông báo thành công này:
Sau đó, bạn có thể kiểm tra thư mục mà bạn đặt làm nơi lưu trữ các lớp Mô hình được tạo ra.
Sau đó, trong lớp bộ điều khiển, chúng ta có thể chỉ cần sử dụng lớp mô hình trang web.
<?php
class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
$siteform = new Form_Site();
if( $this->_request->isPost() && $siteform->isValid($this->_request->getPost()) ) {
//stuff to do if the input is correct
$site = new Model_Site();
$site->url = $this->_request->getParam(‘siteurl’);
$site->save();
//redirect to our success page
$this->_redirect(“/index/correct”);
}
$this->view->siteform = $siteform;
}
public function correctAction()
{
// Yay, we’re re-using our Form_Site object!
$this->view->siteform = new Form_Site();
}
}
Nếu kiểm tra bảng trang web của mình, chúng ta sẽ thấy rằng hồ sơ của chúng ta đang ở đó:
Bây giờ, mỗi khi gửi đi một trang web, bộ điều khiển sẽ sử dụng triển khai mô hình Doctrine để lưu vào cơ sở dữ liệu. Rất hữu ích và dễ thực hiện đúng không? Thiết lập có thể hơi phức tạp, nhưng về mặt tích cực, dự án của Tuts+ hiện có thể tận dụng lợi thế của một công cụ đã được phát triển đặc biệt để triển khai Mô hình. Dự án của Tuts+ hiện có sức mạnh của hai công nghệ rất phát triển đằng sau nó.
Lý do 7. Hướng dẫn và Tiêu chuẩn
Zend Framework được phát triển cùng với Hướng dẫn dành cho cộng tác viên rất phong phú, về cơ bản nêu rõ rằng:
- Mọi cộng tác viên cho cả tài liệu và / hoặc mã, ở bất kỳ cấp độ nào (một vài dòng mã, bản vá hoặc thậm chí một thành phần mới) đều phải ký Thỏa thuận cấp phép đóng góp (CLA).
- Mã PHẢI được kiểm tra bởi đơn vị test sử dụng PHPUnit.
- Mã phải tuân thủ các tiêu chuẩn mã hóa nghiêm ngặt.
Các nguyên tắc nghiêm ngặt này đảm bảo rằng bạn chỉ sử dụng mã có thể đọc được, chất lượng cao đã được kiểm tra kỹ lưỡng.
Lý do 8. All Code is Guilty Until Proven Innocent (hay Phát triển hướng kiểm thử TDD)
Phát triển hướng kiểm thử TDD là một kỹ thuật lập trình yêu cầu nhà phát triển viết các test cho chức năng mà anh ta phải viết mã trước khi viết mã cho chính chức năng đó. Bằng cách viết các test trước, nó đảm bảo rằng lập trình viên:
- Suy nghĩ về các use-case có thể xảy ra với mã của anh ta.
- Tạo danh sách đầu vào và đầu ra cho phép.
- Giúp cấu trúc lại mã của anh ta dễ dàng hơn.
- Giúp chuyển mã từ người này sang người khác dễ dàng hơn.
Zend Framework giúp bạn dễ dàng thực hiện TDD thông qua Zend_Test, sử dụng PHPUnit, một framework kiểm thử đơn vị phổ biến. PHPUnit cho phép bạn kiểm tra không chỉ Bộ điều khiển mà còn kiểm tra thư viện và các chức năng mô hình của bạn. Thêm vào đó, Zend_Tool, là tiện ích giàn giáo của Zend Framework, đã cung cấp các điều khoản cho PHPUnit khi bạn sử dụng nó để tạo dự án của mình.
Tích hợp PHPUnit và Zend Framework
Thiết lập Zend Framework và PHPUnit không quá khó. Về cơ bản, sau khi hoàn tất, bạn sẽ có thể sử dụng cùng một thiết lập cho các dự án trong tương lai của mình. Một lưu ý nhỏ rằng, các bước sau đây giả định rằng bạn đã sử dụng Zend_Tool để xây dựng cấu trúc dự án và các tệp của mình, nhưng cũng tương đối đơn giản để thay đổi đối với các thiết lập khác.
Đầu tiên, chúng ta cần cài đặt PHPUnit. Cách tốt nhất là cài đặt nó qua PEAR:
pear channel-discover pear.phpunit.de
pear install phpunit/PHPUnit
Sau đó, chúng ta sẽ mở phpunit.xml, một tệp XML được tạo bởi Zend_Tool. Bạn sẽ tìm thấy nó bên trong thư mục tests trong thư mục gốc của dự án. Thêm các dòng sau:
<phpunit bootstrap=”./TestHelper.php” colors=”true”>
<testsuite name=”Zend Framework Unit Testing”>
<directory>.</directory>
</testsuite>
<filter>
<whitelist>
<directory suffix=”.php”>../library</directory>
<directory suffix=”.php”>../application</directory>
<exclude>
<directory suffix=”.phtml”>../application</directory>
</exclude>
</whitelist>
</filter>
</phpunit>
Sau khi lưu phpunit.xml, hãy tạo một tệp mới bên trong cùng thư mục với phpunit.xml có tên TestHelper.php. Tệp PHP này sẽ giúp chúng ta thiết lập môi trường cho các test.
<?php
// start output buffering
ob_start();
// set our app paths and environments
define(‘BASE_PATH’, realpath(dirname(__FILE__) . ‘/../’));
define(‘APPLICATION_PATH’, BASE_PATH . ‘/application’);
define(‘APPLICATION_ENV’, ‘testing’);
// Include path
set_include_path(
‘.’
. PATH_SEPARATOR . BASE_PATH . ‘/library’
. PATH_SEPARATOR . get_include_path()
);
// We wanna catch all errors en strict warnings
error_reporting(E_ALL|E_STRICT);
require_once ‘ControllerTestCase.php’;
Sau đó, tạo lớp Controller Test Case gốc của mình, nơi mà toàn bộ các Cotroller của chúng ta sẽ mở rộng. Điều này sẽ giúp triển khai các phương thức thường giống nhau trong tất cả các lớp Controller test.
<?php
require_once ‘Zend/Application.php’;
require_once ‘Zend/Test/PHPUnit/ControllerTestCase.php’;
abstract class ControllerTestCase extends Zend_Test_PHPUnit_ControllerTestCase
{
public $application;
public function setUp()
{
$this->application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . ‘/configs/application.ini’
);
$this->bootstrap = $this->application;
parent::setUp();
}
public function tearDown()
{
$this->resetRequest();
$this->resetResponse();
parent::tearDown();
}
}
Cuối cùng, chúng ta tạo một lớp Controller test:
<?php
require_once realpath(dirname(__FILE__) . ‘/../../ControllerTestCase.php’);
class IndexControllerTest extends ControllerTestCase
{
public function testCallingRootTriggersIndex()
{
$this->dispatch(‘/’);
$this->assertController(‘index’);
$this->assertAction(‘index’);
}
public function testCallingBogusTriggersError()
{
$this->dispatch(‘/bogus’);
$this->assertController(‘error’);
$this->assertAction(‘error’);
$this->assertResponseCode(404);
}
}
Tất cả cần làm còn lại là chạy test. Mở command prompt và chuyển đến thư mục Tests và nhập:
phpunit
Dòng lệnh của bạn sẽ xuất ra như sau:
Lý do 9. Cộng đồng và Tài liệu
Do có nhiều thành phần, phức tạp và cách tiếp cận hướng đối tượng toàn bộ, Zend Framework rất khó để học. Nó trở nên dễ học hơn do tính toàn diện của tài liệu và cộng đồng phát triển của nó. Trước hết, Zend Framework Programmer’s Reference Guide tự hào có hướng dẫn đầy đủ cho tất cả các thành phần ZF, với các ví dụ, mã và lý thuyết sử dụng.
Bên cạnh đó, có rất nhiều blog chia sẻ các mẹo và thủ thuật của Zend Framework. Ví dụ, Phly, boy, phly, blog của Matthew Weier O’Phinney, một cộng tác viên cốt lõi cho Zend Framework, cung cấp rất nhiều thông tin chi tiết, cách sử dụng thông minh và giải thích thành phần của Zend Framework. Zend cũng có một trang gọi là Zend Developer Zone, ngoài việc cho ra các hướng dẫn về Zend Framework, còn có những thứ như Zend Framework Webinars, podcast và các bài báo về PHP nói chung. Một trang web khác, được gọi là Zend Casts, cung cấp rất nhiều video hướng dẫn hữu ích về các thành phần Zend Framework khác nhau. Cuối cùng nhưng không kém phần quan trọng, có một cuốn sách trực tuyến miễn phí tên là “Zend Framework: Surviving the Deep End ” được viết bởi P.draic Brady, một cộng tác viên của Zend Framework.
Như bạn có thể thấy, sự hỗ trợ từ cộng đồng, tài liệu và các nhà phát triển là vô cùng nhiều. Nếu bạn có bất kỳ câu hỏi nào hoặc cần làm rõ bất kỳ điều gì, hãy sử dụng một từ khóa phù hợp để tìm kiếm, chắc chắn sẽ mang lại cho bạn kết quả như ý. Nếu vẫn không cho ra kết quả phù hợp, bạn vẫn có thể tìm đến sự hỗ trợ của Zend Framework Mailing List, các diễn đàn chính thức của Zend Framework, các diễn đàn không chính thức của Zend Framework hoặc các kênh không chính thức Zend Framework IRC.
Lý do 10. Chứng nhận Ahoy!
Nếu bạn vẫn chưa bị thuyết phục về việc học và sử dụng Zend Framework bởi các lý do trên, thì đây chính là lý do tạo nên sự khác biệt cho Zend Framework nhất. Zend không chỉ cung cấp Chứng chỉ Zend Framework mà còn cả Chứng chỉ PHP. Bằng cách cung cấp các chứng chỉ, Zend giúp bạn sử dụng kiến thức chuyên môn của mình về PHP và Zend Framework để nâng cao danh mục đầu tư hoặc CV của bạn. Trang web Zend Certification liệt kê một số lý do nên giành lấy các chứng chỉ, một số trong số đó là:
- Tạo sự khác biệt cho bản thân với các đối thủ cạnh tranh khi tìm kiếm một công việc mới.
- Giúp sơ yếu lý lịch / CV của bạn trở nên nổi bật.
- Để hồ sơ của bạn được hiển thị trong Trang vàng của Zend dành cho Chuyên gia PHP.
- Là thành viên của nhóm Linkedin dành riêng cho ZCE’s.
- Nhận chiết khấu đặc biệt cho các hội nghị Zend PHP trên toàn thế giới.
Nhược điểm của Zend Framework
Để giữ mọi thứ cân bằng, đây là danh sách nhanh các lý do tại sao bạn có thể không muốn sử dụng Zend Framework:
- Việc học Zend Framework là rất khó. Nó không quá khó đối với người dùng PHP nâng cao, nhưng đối với người mới bắt đầu, có rất nhiều điều để học!
- Dấu chân lớn. Vì Zend Framework có rất nhiều thành phần nên tổng kích thước của nó tương đối cao hơn các Framework khác. Ví dụ: thư mục hệ thống của CodeIgniter có dung lượng 1,5MB so với dung lượng 28MB của Zend Framework.
- Không có công cụ scaffolding vững chắc. Mặc dù Zend_Tool cung cấp một số chức năng, nhưng nó không nhiều so với các tiện ích scaffolding của các full-stack framework như CakePHP hoặc Symfony.
- Không thân thiện với webhosting được chia sẻ. Cấu trúc thư mục do Zend_Tool tạo ra gợi ý rằng thư mục chung là thư mục duy nhất có thể truy cập được qua http, giả định rằng người dùng có thể tạo một máy chủ ảo cho dự án. Đây là điều bạn không thể làm trong hầu hết các môi trường lưu trữ web được chia sẻ.
- Liên kết quá mạnh. Vì mọi thứ đều nằm trong các lớp riêng biệt, nên đôi khi rất khó để hình dung mọi thứ hoạt động như thế nào. Điều này sẽ không thành vấn đề với các full-stack framework, vì chúng đã làm mọi thứ cho bạn. Nếu không có Zend_Tool, sẽ rất khó để thiết lập một cấu trúc dự án hoạt động được.