Aug
28

Tích hợp Zend framework vào CakePHP

Author admin    Category Chia sẻ, Kinh nghiệm     Tags ,

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ả

Lấy video từ youtube

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”

  • Lee sea wuyhs 19/02/2011 at 9:30 pm

    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?

    • datgs 04/05/2011 at 11:39 am

      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

      • admin 07/05/2011 at 12:48 pm

        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,

        • datgs 09/05/2011 at 9:20 am

          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.

    • datgs 06/05/2011 at 1:20 pm

      Bạn chưa cấu hình include_path cho Zend nên mới có lỗi như vậy.

Post comment

Follow us on Twitter! Follow us on Twitter!
Diễn đàn CakePHP cho người Việt Nam

Bài viết mới

Thảo luận mới

TAG

Calendar

August 2010
M T W T F S S
« Jul   Sep »
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

Lưu trữ

Blogroll

Thống kê

Danh sách: 4 khách