Tích hợp Zend framework vào CakePHP
Zend Framework là một PHP Framework được do chính công ty phát triển ngôn ngữ PHP phát triển (http://www.zend.com). Zend Framework được xây dựng trên nền tảng lập trình hướng đối tượng nên có thể thừa kế, nâng cấp các ứng dụng dễ dàng.
Zend có độ linh hoạt cao, dùng được cho nhiều ứng dụng, việc thiết kế cấu trúc thư mục là do người dùng quyết định cho phù hợp với ứng dụng của họ, không có chuẩn chung (mặc dù Zend cũng đưa ra cấu trúc thư mục khuyến cáo người dùng làm theo).
Một ngày nào đó mình sẽ thử nghiên cứu chú này để mở rộng kiến thức. Còn hiện giờ, CakePHP vẫn là sự lựa chọn của mình.
Bài viết này sẽ hướng dẫn các bạn nạp các thư viện của Zend để làm việc chung với CakePHP và demo một ứng dụng nho nhỏ: lấy video từ youtube.com thông qua các thư viện Gdata của Zend
1. Chuẩn bị
- Các bạn tải thư viện Zend từ link sau: http://www.zend.com/download/398?start=true
- Giải nén, tìm thư mục Zend trong library chép vào app/vendors
2. Tạo component để nạp Zend
- Tạo file zend.php trong app/controllers/components
- Nội dung file:
<?php class ZendComponent extends Object{ public function startup() { $include = get_include_path(); $include .= PATH_SEPARATOR. APP . 'vendors' . DS; $successful = set_include_path($include); if (!$successful) { throw new Exception('ZendComponent failed to set include path.', E_ERROR); } require_once('Zend/Loader.php'); } public function loadClass($class, $dirs = null){ Zend_Loader::loadClass($class, $dirs); } public function loadFile($filename, $dirs = null, $once = false){ Zend_Loader::loadFile($filename, $dirs, $once); } public function isReadable($filename) { Zend_Loader::isReadable($filename); } } ?> |
3. Demo ứng dụng lấy video từ youtube
- Yêu cầu: lấy danh sách video được xem nhiều nhất trên youtube.com, thông tin bao gồm: tên video, độ dài, hình thumb (nhỏ), video
- Tạo file you_tube_controller.php trong app/controllers
- Nội dung file:
<?php class YouTubeController extends AppController { var $name = 'YouTube'; var $uses = null; var $components = array('Zend'); var $helpers = array('Html','Form','Session'); function video_feed() { $this->Zend->loadClass('Zend_Uri_Http'); $this->Zend->loadClass('Zend_Gdata_YouTube'); $yt = new Zend_Gdata_YouTube(); $videoFeed = $yt->getMostViewedVideoFeed(); $this->set(compact('videoFeed')); } } ?> |
- Tạo file index.ctp trong app/views/you_tube/
- Nội dung file:
<h1>Get video from YouTube with CakePHP and Zend</h1> <table border="0" cellpadding="5" cellspacing="0"> <tr> <th>Title</th> <th>Thumb</th> <th>Duration</th> <th>Video</th> </tr> <?php foreach ($videoFeed as $videoEntry) { echo '<tr>'; echo '<td>'.$videoEntry->getVideoTitle().'</td>'; $videoThumbnails = $videoEntry->getVideoThumbnails(); echo '<td>'; if(isset($videoThumbnails[0])) { $videoThumbnail = $videoThumbnails[0]; echo $html->image($videoThumbnail['url']); } echo '</td>'; echo '<td>'.$videoEntry->getVideoDuration().'</td>'; echo '<td>'; echo '<object width="240" height="192"> <param name="movie" value="'.$videoEntry->getFlashPlayerUrl().'"> </param><param name="allowFullScreen" value="true"> </param><param name="allowscriptaccess" value="always"></param> <embed src="'.$videoEntry->getFlashPlayerUrl().'" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="240" height="192"></embed> </object>'; echo '</td>'; echo '</tr>'; } ?> </table> |
- Chạy ứng dụng: http://localhost/cake/you_tube/ để xem kết quả
4. Kết luận
- Với việc nạp Zend để dùng với CakePHP, bạn sẽ tận dụng được sức mạnh của Zend thông qua nhiều thư viện được xây dưng sẵn. Không chỉ làm việc với API của youtube, bạn có thể lấy dữ liệu từ google calendar, google docs, photo, book….
Xem thêm về cách dùng API của youtube tại đây: http://code.google.com/intl/vi-VN/apis/youtube/2.0/developers_guide_php.html
5 Comments to “Tích hợp Zend framework vào CakePHP”
Post comment
Bài viết mới
- CakePHP version 1.3.12
- Tạo chuỗi ngẫu nhiên với 1 dòng code
- Kỹ thuật “bit field” trong phân quyền
- Làm việc với File và Folder
- CakePHP 1.3.8
- CakePHP 1.3.7 Released
- Ajax trong CakePHP
- Tạo và load file config trong CakePHP
- Làm site đa ngôn ngữ với CakePHP (Phần 1)
- CakePHP 1.3.6 and 1.2.9 released
- CakePHP 1.3.5 released
- Type hinting trong PHP
- CakePHP ra phiên bản mới 1.3.4
- Tích hợp Zend framework vào CakePHP
- Tạo virtual host trên local
- Sử dụng Acl trong cakephp – Phần 2
- Sử dụng Acl trong cakephp – Phần 1
- Sinh code tự động với cake console
- Tự động xóa record ở bảng con khi reocord ở bảng cha bị xóa
- Xác thực người dùng với component Auth
Thảo luận mới
- admin on Cách viết plugin cho CakePHP
- vinh on Xác thực người dùng với component Auth
- vinh on Sử dụng Acl trong cakephp – Phần 1
- hoaipt on Cách viết plugin cho CakePHP
- tuyền on Kỹ thuật “bit field” trong phân quyền
- admin on Tạo danh mục đa cấp với behavior Tree
- admin on Làm việc với File và Folder
- admin on Sinh code tự động với cake console
- admin on Kỹ thuật “bit field” trong phân quyền
- phùng ngọc lan on Tạo danh mục đa cấp với behavior Tree
TAG
Calendar
Lưu trữ
- September 2011 (3)
- July 2011 (1)
- March 2011 (1)
- February 2011 (1)
- November 2010 (4)
- October 2010 (1)
- September 2010 (2)
- August 2010 (9)
- July 2010 (9)
- June 2010 (22)
Blogroll
- Bakery
- Biển đảo Việt Nam
- CakePHP
- CakePHP Google Group
- CakePHP Manual
- CakePHP Questions
- Diễn đàn CakePHP VN

admin


Trên localhost, Mình tích hợp zend vào cakephp nhưng xảy ra lỗi như thế này: (MÌnh làm theo hướng dẫn trên):
Warning (2): require_once(Zend/Config.php) [function.require-once]: failed to open stream: No such file or directory [APP\vendors\Zend\Config\Xml.php, line 25]
Fatal error: require_once() [function.require]: Failed opening required ‘Zend/Config.php’ (include_path=’C:\wamp\www\warp;C:\wamp\www\warp\app\;.;C:\php5\pear’) in C:\wamp\www\warp\app\vendors\Zend\Config\Xml.php on line 25
Mình kiểm tra đường dẫn tồn tại nhưng ko hiểu sao nó ko hoạt động, nên cấu hình như thế nào! Can u help me?
1/. Khi tích hợp Zend, nên khởi tạo Zend autoload vì rất nhiều component của Zend phụ thuộc tùm lum, không thể chơi kiểu này được
$this->Zend->loadClass(‘Zend_Uri_Http’);
$this->Zend->loadClass(‘Zend_Gdata_YouTube’);
2/. @Lee sea wuyhs, bạn chưa có thiết lập include path tới thư mục gốc của Zend, chỉ cần làm vậy là ok (bạn có thể dùng ini_set hoặc cấu hình trong php.ini)
(include_path=’C:\wamp\www\warp;C:\wamp\www\warp\app\;.;C:\php5\pear’) in C:\wamp\www\warp\app\vendors\Zend\Config\Xml.php
Vì mình chỉ dùng vài thư viện nên mình load đúng cái mình cần, không dùng autoload. Autoload là tiện ích nhưng nếu ko kiểm soát nổi nó thì ứng dụng của bạn nó ì ạch,
Sao lại không kiểm soát nổi. AutoLoader của Zend (dung spl_autoload_register) đảm bảo cho bạn chỉ load những cái bạn cần.
Bạn chưa cấu hình include_path cho Zend nên mới có lỗi như vậy.