gpt4 book ai didi

php - Composer : two libraries class name conflict

转载 作者:行者123 更新时间:2023-12-03 23:58:53 25 4
gpt4 key购买 nike

我正在使用 composer 的这两个库

"require": {
"alterfw/php-form-generator": "^0.1.2",
"rlanvin/php-form": "dev-master"
},

最大的问题是两者都有相同的类名 Form 没有定义 namespace。现在,无论我是仅在同一页面上实例化一个类还是两者都实例化,它都会给我一个错误,如下所示

Fatal error: Call to undefined method Form::create() in...

create 方法是从 alterfw/php-form-generator 库生成表单标记。

所以当我尝试这个时

$form = Form::create('path-to-action.php');
$form->add(Form::text('settings')->setLabel('Settings')->setValue('None'));
echo $form->render();

给我上面提到的错误。对我来说很难理解为什么即使我没有实例化另一个类它仍然给出错误。

我对 Composer 也不是很熟悉,没有任何指导可以深入了解自己。

那么有什么办法可以同时使用这两个库吗?

最佳答案

Tip: Packages without a vendor namespace are a bad practice, as you can see here. I recommend creating an issue for both packages saying they should really add a vendor namespace.

这里的问题是,只要您在代码中使用 Form,该类还没有加载,并且 Composer 的自动加载器被执行。因为它有 2 个包来加载类,它会选择第一个注册的自动加载规则。这会导致错误的 Form 类:问题!

您可以在 composer.json 中交换包位置,但这意味着其他类不再可用。

另一种解决方案是使用 require()/require_once() PHP 函数自己要求该类。这是一种不好的做法,也意味着您只能使用 2 个 Form 类中的一个(在已经需要一个之后需要另一个表单类会导致“名称为“Form”的类已经存在”PHP错误)。

TL;DR:您只能在同一应用程序中使用 2 个软件包之一。

关于php - Composer : two libraries class name conflict,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33065539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com