用户
 找回密码
 入住 CI 中国社区
搜索
查看: 7865|回复: 11
收起左侧

将 Zend Framework 整合到 Codeigniter(转帖)

[复制链接]
发表于 2010-5-31 10:46:55 | 显示全部楼层 |阅读模式
毕竟用惯了ZF,所以现在用CI有时候也想从ZF里面扒点东西,
提醒,只能用PHP5。不兼容PHP4 ,因为ZF是纯粹的PHP5~~

 網路上教大家結合Zend Framework(ZF)跟CodeIgniter(CI)的方式大多是使用hook方式。但存在著潛在的危險性,因為hook是寫在pre_controller(在所有的控制器(controller)呼叫之前執行,此時所有的基礎類別、路由、安全檢查都已經完成。),這樣子的話假如ZF某些功能影響到CI,就會導致CI整個無法運作,且很難做Debug。

  接下來教大家如果利用Library的方式將ZF整合到CI。

1.從Zend Framework官方網站下載ZF。

2.解壓縮ZF,複製Library下面的Zend目錄到CI 的application/libraries/下

3.在application/libraries下新增一個zend.php,程式碼如下


if (!defined('BASEPATH')) {exit('No direct script access allowed');}
PHP复制代码
/**
 * Zend Framework Loader
 *
 * Put the 'Zend' folder (unpacked from the Zend Framework package, under 'Library')
 * in CI installation's 'application/libraries' folder
 * You can put it elsewhere but remember to alter the script accordingly
 *
 * Usage:
 *   1) $this->load->library('zend', 'Zend/Package/Name');
 *   or
 *   2) $this->load->library('zend');
 *      then $this->zend->load('Zend/Package/Name');
 *
 * * the second usage is useful for autoloading the Zend Framework library
 * * Zend/Package/Name does not need the '.php' at the end
 */

class CI_Zend
{
 /**
  * Constructor
  *
  * @param string $class class name
  */

 function __construct($class = NULL)
 {
  // include path for Zend Framework
  // alter it accordingly if you have put the 'Zend' folder elsewhere
  ini_set('include_path',
  ini_get('include_path') . PATH_SEPARATOR . APPPATH . 'libraries');
 
  if ($class)
  {
   require_once (string) $class . EXT;
   log_message('debug', "Zend Class $class Loaded");
  }
  else
  {
   log_message('debug', "Zend Class Initialized");
  }
 }
 
 /**
  * Zend Class Loader
  *
  * @param string $class class name
  */

 function load($class)
 {
  require_once (string) $class . EXT;
  log_message('debug', "Zend Class $class Loaded");
 }
}
复制代码


4 接下來就可以使用ZF
PHP复制代码
class Welcome extends Controller {
 
 function Welcome()
 {
  parent::Controller();
 }
 
 function index()
 {
  $this->load->library('zend', 'Zend/Service/Flickr');
  // newer versions of CodeIgniter have updated its loader API slightly,
  // we can no longer pass parameters to our library constructors
  // therefore, we should load the library like this:
  // $this->load->library('zend');
  // $this->zend->load('Zend/Service/Flickr');
 
  $flickr = new Zend_Service_Flickr('YOUR_FLICKR_API_KEY');
 
  $results = $flickr->tagSearch('php');
  foreach ($results as $result)
  {
   echo $result->title . '';
  }
  //$this->load->view('welcome_message');
 }
}
复制代码


延伸阅读:Using Zend Framework with CodeIgniter
 楼主| 发表于 2010-5-31 10:50:04 | 显示全部楼层
晕倒,代码功能在FF,CHROME和IE底下均失效......
   原文在 http://superlevin.ktop.com.tw/2010/02/14/10/
 楼主| 发表于 2010-5-31 10:50:44 | 显示全部楼层
再度晕倒,连超链接都不可以
发表于 2010-5-31 15:49:17 | 显示全部楼层
我帮楼主改了一下。

PS: 贴代码的功能我各个浏览器都试过。直接贴是不行的。
 楼主| 发表于 2010-5-31 17:16:32 | 显示全部楼层
回复 4# Hex


   H大,谢谢您的修改。   BTW:我说的是编辑功能中的代码功能在所有浏览器中失效,直接贴代码当然不行,我不是第一次用discuz的论坛了,貌似discuz7.2中有很多功能无效:)
发表于 2010-6-1 00:51:29 | 显示全部楼层
回复 5# kkk


    是吗?dz 对浏览器兼容性是有问题,哪里有问题你可以直接提出来,能改正的我尽量改正,呵呵
 楼主| 发表于 2010-6-1 09:00:40 | 显示全部楼层
回复 6# Hex


   是的,我已经测试过很多遍了,代码功能在回帖下士可以的,但是在“发新话题”中所有浏览器都失效,请H大检查下,我的是XP系统。
发表于 2010-6-1 09:39:16 | 显示全部楼层
回复 7# kkk


    -_- 我这里贴代码功能是正常的。。。不知道你是如何操作的?感谢提供详细信息,呵呵
 楼主| 发表于 2010-6-1 09:45:34 | 显示全部楼层
未命名1.GIF


未命名.GIF
 楼主| 发表于 2010-6-1 09:46:54 | 显示全部楼层
回复 8# Hex


   简单来说,就是普通模式下代码功能是可以的,但是发新话题和高级模式是不可以的。

本版积分规则