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

vsnjm48y  于 2022-11-09  发布在  其他
关注(0)|答案(3)|浏览(160)

我想试试Yii,但我不想用它作为我的主框架。换句话说,我想使用我自己的框架,同时也使用Yii的一些特性。我想为了能够从我的应用程序示例化Yii的类,我只需要从我的应用程序注册Yii的autoloader,大概用类似于下面的方式:

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

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

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

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

vc9ivgsu

vc9ivgsu1#

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()Ref:检查YiiBase.php文件中的最后一行 *
roqulrg3

roqulrg32#

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

vshtjzan

vshtjzan3#

this article在页面中间的“* 在第三方系统中使用Yii *”标题下解释了Yii2的使用。
以下是启动外部应用程序时要包含的相关部分:

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__ . '/../以适合您的目录布局。

相关问题