2011-12-27 14 views
9

Come posso chiamare queste funzioni di libreria da qualsiasi parte mia Yii app? Ho una libreria:compresi libreria esterna in Yii

#mylib.php 

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

e voglio essere in grado di chiamare questa funzione per tutta la mia Yii app:

MyLib::foo(); 

non so dove mettere la mia biblioteca o come/dove per importarlo . Questo è solo un esempio di ciò che sto cercando di fare, ma sto cercando di creare una libreria con più spazi dei nomi in modo da poter accedere alla libreria e avere accesso a tutti gli spazi dei nomi dopo averla importata.

+1

[Uso delle librerie 3a parte a Yii] (http://www.yiiframework.com/doc/guide/1.1/en/extension.integration) – Poe

risposta

17

Ci sono diversi modi. autoloader

  1. biblioteche registro:

    // 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. Aggiungi biblioteca alla sezione di importazione nel vostro config/main.php:

    return array(   
        // Autoloading 
        'import' => array(
         'application.lib.*', 
         'application.components.*', 
         'site.common.extentions.YiiMongoDbSuite.*', 
        ), 
    ); 
    
  3. Autoloading ovunque nella vostra applicazione:

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

posto la libreria nella cartella vendor (sotto cartella protetta) supponendo (tutte le classi sono nella cartella MyLib) si fa in questo modo:

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

In aggiunta a questo, se avete un sacco di file così da includere, basta metterli in "/ protected/components" Yii includerà tutti i file in questa directory. – LotusH

1

Io uso proprio autoloader di 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'));