1

我将 Lumen 与现有的 PHP 应用程序一起使用。

全局命名空间中存在冲突。现有应用程序在全局命名空间中也有一个 DB 类,它与 Lumen 的 DB 类冲突。

// in vendor/laravel/lument-framework/src/Appliction.php

public function withFacades()
{
    Facade::setFacadeApplication($this);

    if (! static::$aliasesRegistered) {
        static::$aliasesRegistered = true;

        class_alias('Illuminate\Support\Facades\App', 'App');
        class_alias('Illuminate\Support\Facades\Auth', 'Auth');
        class_alias('Illuminate\Support\Facades\Bus', 'Bus');
        class_alias('Illuminate\Support\Facades\DB', 'DB');
        ...
    }
}

如果我改变 class_alias('Illuminate\Support\Facades\DB', 'LumenDB'); 为我解决了这个问题,但我不想在供应商文件夹中编辑代码。

无论如何我可以以编程方式更改它吗?

4

2 回答 2

1

好吧。我想我现在有一个解决方法。

在 bootstrap/app.php 取消注释或删除此行

// $app->withFacades();

并替换为。

class_alias('Illuminate\Support\Facades\App', 'App');
class_alias('Illuminate\Support\Facades\Auth', 'Auth');
class_alias('Illuminate\Support\Facades\Bus', 'Bus');
class_alias('Illuminate\Support\Facades\DB', 'LumenDB');
...
...
class_alias('Illuminate\Support\Facades\Validator', 'Validator');

所以我们将手动注册外观而不是调用 withFacades() 函数。

于 2015-05-28T17:05:32.830 回答
0

在较新版本的 Laravel/Lumen 中,正确的方法是传递一个“用户别名”数组作为该$app->withFacades()方法的第二个参数。

$app->withFacades(
    true, // $aliases parameter set to true (default)
    [
    'Illuminate\Support\Facades\DB' => 'LumenDB',
    ] // array of $userAliases
);
于 2017-09-25T12:46:15.333 回答