2011-12-27 70 views
9

如何從Yii應用程序的任何位置調用這些庫函數?我有一個庫:在Yii中包含外部庫

#mylib.php 

<?php 
class MyLib { 
    public function foo() 
    { 
     echo "hello!"; 
    } 
} 

,並希望能夠調用在我的Yii應用此功能:

MyLib::foo(); 

我不知道在哪裏把我的圖書館或如何/在哪裏導入。這只是我想要做的一個例子,但我正在嘗試創建一個具有多個名稱空間的庫,以便我可以訪問這個庫並在導入它之後訪問所有的名稱空間。

+1

[使用第三方Yii中庫(http://www.yiiframework.com/doc/guide/1.1/en/extension.integration) – Poe 2011-12-27 20:43:21

回答

17

有有幾種方法。

  1. 註冊庫自動加載磁帶機:

    // Enable Zend autoloader 
    spl_autoload_unregister(array('YiiBase', 'autoload')); // Disable Yii autoloader 
    Yii::import('site.common.lib.*'); // Add Zend library to include_path 
    Yii::import('site.common.lib.Zend.Loader.Autoloader', true); // Require Zend autoloader 
    spl_autoload_register(array('Zend_Loader_Autoloader', 'autoload')); // Register Zend autoloader 
    spl_autoload_register(array('YiiBase', 'autoload')); // Register Yii autoloader 
    
  2. 的進口部分將圖書館在你的config/main.php:

    return array(   
        // Autoloading 
        'import' => array(
         'application.lib.*', 
         'application.components.*', 
         'site.common.extentions.YiiMongoDbSuite.*', 
        ), 
    ); 
    
  3. 自動加載的任何地方你的應用程序:

    Yii::import('application.lib.*'); 
    
4

將您的供應商目錄庫(受保護的文件夾下) 假設(所有的類都是MyLib中的文件夾) 你這樣做:

Yii::import('application.vendors.MyLib.*'); 
+0

除此之外,如果你有很多文件像這樣包含,只要把它們放在'/ protected/components'中,Yii就會包含這個目錄中的所有文件。 – LotusH 2011-12-28 06:40:14

1

我使用Yii自己的自動加載器;

//include auto loader class of vendor 
    require dirname(__FILE__).'/mollie-api-php/src/Mollie/API/Autoloader.php'; 
    //Now register vendor autoloader class to Yii autoloader 
    Yii::registerAutoloader(array('Mollie_API_Autoloader','autoload'));