如何在外部应用程序中注册Yii的自动加载器?

时间:2012-10-03 23:15:11

标签: php yii autoload autoloader spl-autoload-register

我想尝试Yii,但我不想将它用作我的主要框架。换句话说,我想使用我自己的框架,同时也使用Yii的一些功能。我想,为了能够从我的应用程序中实例化Yii的类,我只需要从我的应用程序注册Yii的自动加载器,可能与此类似:

spl_autoload_register
(
    function ($classname)
    {
        YiiBase::autoload($className);
    }
);

当然,我需要要求或包含YiiBase类,所以在我调用上一个函数之前,我这样做:

$yiiBase = $_SERVER['DOCUMENT_ROOT'].'/yii/framework/YiiBase.php';
require_once($yiiBase);

但我得到了“无法重新声明YiiBase类”的错误。我错过了什么?

3 个答案:

答案 0 :(得分:3)

1)不要直接包含YiiBase.php,包括yii.php。因为yii.php包含一个类Yii,它在所有框架代码中使用(即使在YiiBase方法中)。

 $yii = $_SERVER['DOCUMENT_ROOT'].'/yii/framework/yii.php';
 require_once($yii);

(默认情况下YiiBase.php包含在yii.php中)

2)以这种方式注册您的autoload handler。 (Yii具有添加自定义自动加载处理程序的内置功能)。

$my_autoload =  function($class) { ... };
// OR
// $my_autoload = array('MyClass', 'my_autoload')

YiiBase::registerAutoloader($my_autoload, true);

第二个参数true告诉whether to append/prepend the new autoloader after/before the default Yii autoloader

如果包含YiiBase.php,那么Yii的默认自动加载器也会被包含在内。无需在代码中明确调用YiiBase::autoload()参考:检查YiiBase.php档案中的最后一行

答案 1 :(得分:0)

您可以查看人integrating Yii with wordpress的一些方法,您可能不需要这样做 - >运行()应用程序,除非您需要控制器/路由,它还取决于哪些部分你假装使用的框架。

答案 2 :(得分:0)

要为Yii2做到这一点,this article在页面中间的“ 在第三方系统中使用Yii ”标题下进行了解释。

以下是启动外部应用程序时要包括的相关部分:

  require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
  $yiiConfig = require(__DIR__ . '/../config/yii/web.php');
  new yii\web\Application($yiiConfig); // Do NOT call run() here

显然,__DIR__ . '/../可能需要调整以适合您的目录布局。