YII中引入第三方的库

jerry Yii 2016年01月22日 收藏

首先要了解Root Alias 

为方便起见,Yii 预定义了以下几个根别名: 

    system: 表示 Yii 框架目录; 

    zii: 表示 Zii 库 目录; 

    application: 表示应用的 基础目录; 

    webroot: 表示 入口脚本 文件所在的目录。此别名从版本 1.0.3 开始有效。 

    ext: 表示包含了所有第三方 扩展 的目录。此别名从版本 1.0.8 开始有效。 

* 导入Class 

使用别名可以很方便的导入类的定义。例如,如果我们想包含 protect/mylib/MyClass.php 类的定义,我们可以调用如下代码 

Yii::import('application.mylib.MyClass');

import 方法跟 include 和 require 不同,它更加高效。导入(import)的类定义并不会真正被包含进来,直到它第一次被引用。多次导入同样的名字空间也会比 include_once 和 require_once 快得多。 

提示: 当引用 Yii 框架定义的类时,我们不需要导入或包含它。所有的核心 Yii 类都已被提前导入了。

* 引用第三库 

第一,比如说,我们要使用 Zend framework的东西。我们把zend framework解压到 prtected/vendors里面,现在的文件夹为 protected/vendors/Zend/Search/Lucene.php 

第二,在controller文件的头部,插入下面代码。 

Yii::import('application.vendors.*'); // 可以配置在config/main.php中 
require once('Zend/Search/Lucene.php');

上面代码包含了Lucene.php这个类文件。因为我们用到的是相对路径,所以我们需要改变PHP加载文件的路径,Yii::import 一定要在require_once 之前。 

综述,引入第三方的php有如下方法:

一、设置环境变量(在PHP) 

echo get_include_path();       //获取当前所有环境变量。即该项目中那些代码已被引用。 
set_include_path('.'. PATH_SEPARATOR . Yii::app()->basePath.'/lib/PHPExcel' . PATH_SEPARATOR . get_include_path());  //新增一个环境变量,写在最前面。 
echo get_include_path();

通过两次差别,可以看出,使用set_include_path()函数,设置新的环境变量成功。 

二、在YII中引用 

1,

Yii::import("application.lib.PHPExcel.*");

解释: 

application相当于protected文件夹。 

2,在yii的../config/main.php中,引入基路径 

return array(  
        'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',  
      ......  
        // autoloading model and component classes  
        'import'=>array(  
            'application.models.*',  
            'application.components.*',  
            'application.helpers.*', // helper methods  
            'ext.mail.Message',  
            'application.lib.*',  
        ),  
    )

在代码中可以使用下面方式引用 

Yii::app()->basePath

3,在controller使用 

    //引入PHPExcel相关文件  
    require_once 'PHPExcel.php';  
    require_once 'PHPExcel/IOFactory.php';  
    require_once 'PHPExcel/Writer/Excel2007.php';  
    require_once 'PHPExcel/Writer/Excel5.php';

三、在Yii中引用插件 

注:插件和扩展不一样 

1,源码放在project/ckeditor/* 

2,在代码create,update中引用 

  <?php  
    include_once "/ckeditor/ckeditor.php";  
    // Create a class instance.  
    $CKEditor = new CKEditor();  
      
    // Path to the CKEditor directory.  
    $CKEditor->basePath = Yii::app()->baseUrl.'/ckeditor/';  
      
    // Replace a textarea element with an id (or name) of "textarea_id".  
    $CKEditor->replace("News_content");  
    ?>

引入插件方法二: 

第一,比如说,我们要使用 Zend framework的东西。我们把zend framework解压到 prtected/vendors里面,现在的文件夹为 protected/vendors/Zend/Search/Lucene.php 

第二,在controller文件的头部,插入下面代码。 

Yii::import(’application.vendors.*’); 
require once(’Zend/Search/Lucene.php’);

上面代码包含了Lucene.php这个类文件。因为我们用到的是相对路径,所以我们需要改变PHP加载文件的路径,Yii::import 一定要在require_once 之前。 

第三,一旦我们设置好了,我们就可以在controller里面使用了。比如说 

$lucene=new Zend Search Lucene($pathOfIndex); 
$hits=$lucene->find(strtolower($keyword));

四、在一个页面中引入任意其他文件 

比如,想在../controllers/OutsourceController.php直接使用../components/RMSClient.php,可用如下方法 

require_once(dirname(__FILE__)."/../components/RMSClient.php");  
      
    //注意以下方式引入,提升找不到  
    require_once(Yii::app()->baseUrl . "/protected/components/RMSClient.php");  
      
    //原因:include、require包含的是服务器上的文件路劲,和url没有直接关系。  
    //如果想用yii::app()方式,可以使用../config/main.php中的Yii::app()->basePath.