【问题标题】:including external library in Yii包括 Yii 中的外部库
【发布时间】:2012-01-28 18:17:14
【问题描述】:

如何在 Yii 应用程序的任何位置调用这些库函数?我有一个图书馆:

#mylib.php

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

并且希望能够在我的 Yii 应用中调用这个函数:

MyLib::foo();

我不知道在哪里放置我的库或如何/在哪里导入它。这只是我正在尝试做的一个示例,但我正在尝试创建一个具有多个命名空间的库,以便我可以访问该库并在导入它后访问所有命名空间。

【问题讨论】:

标签: php class namespaces yii


【解决方案1】:

有几种方法。

  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.*');
    

【讨论】:

    【解决方案2】:

    将您的库放在供应商文件夹中(在受保护的文件夹下) 假设(您所有的课程都在 MyLib 文件夹中) 你这样做:

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

    【讨论】:

    • 除此之外,如果你有很多这样的文件要包含,只要把它们放在'/protected/components'中Yii会包含这个目录下的所有文件。
    【解决方案3】:
    【解决方案4】:

    我用的是 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'));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多