我想尝试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类”的错误。我错过了什么?
答案 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__ . '/../
可能需要调整以适合您的目录布局。