Composer:两个库类名冲突

Cod*_*ver 2 php composer-php

我正在使用 Composer 的这两个库

"require": {
  "alterfw/php-form-generator": "^0.1.2",
  "rlanvin/php-form": "dev-master"
},
Run Code Online (Sandbox Code Playgroud)

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

Fatal error: Call to undefined method Form::create() in...
Run Code Online (Sandbox Code Playgroud)

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

所以当我尝试这个时

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

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

我也不太熟悉作曲家,在没有任何指导的情况下深入了解自己。

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

Wou*_*r J 5

提示:没有供应商命名空间的包是一种不好的做法,如您所见。我建议为这两个包创建一个问题,说它们应该真正添加供应商命名空间。

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

您可以交换 中的包位置composer.json,但这意味着另一个类不再可用。

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

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