我在现有的PHP应用程序中使用Lumen。
全局命名空间中存在冲突。现有应用程序在全局命名空间中也有一个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');解决了我的问题,但我不想编辑供应商文件夹中的代码。
无论如何我可以通过编程方式更改它吗?
答案 0 :(得分: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()函数。
答案 1 :(得分:0)
较新版本的Laravel / Lumen中的正确方法是传递一组"用户别名"作为$app->withFacades()
方法的第二个参数。
$app->withFacades(
true, // $aliases parameter set to true (default)
[
'Illuminate\Support\Facades\DB' => 'LumenDB',
] // array of $userAliases
);