1

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

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

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

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

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

4

3 回答 3

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 文件的最后一行

于 2012-10-04T07:35:43.610 回答
0

你可以看看人们将 Yii 与 wordpress 集成的一些方法,你可能不需要做 ->run() 应用程序,除非你需要控制器/路由,它还取决于你假装使用框架的哪些部分.

于 2012-10-03T23:52:00.547 回答
0

为了为 Yii2 做这件事,这篇文章在页面中间的“在第三方系统中使用 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__ . '/../可能需要调整以适合您的目录布局。

于 2019-06-23T03:48:56.687 回答