Php 编写器:两个库类名冲突

Php 编写器:两个库类名冲突,php,composer-php,Php,Composer Php,我正在使用composer提供的这两个库 "require": { "alterfw/php-form-generator": "^0.1.2", "rlanvin/php-form": "dev-master" }, 最大的问题是两者都有相同的类名表单,没有定义名称空间。现在,无论我是在同一个页面上实例化一个类还是两个类,它都会给我一个错误,如下所示 Fatal error: Call to undefined method Form::create() in... create方

我正在使用composer提供的这两个库

"require": {
  "alterfw/php-form-generator": "^0.1.2",
  "rlanvin/php-form": "dev-master"
},
最大的问题是两者都有相同的类名
表单
,没有定义
名称空间
。现在,无论我是在同一个页面上实例化一个类还是两个类,它都会给我一个错误,如下所示

Fatal error: Call to undefined method Form::create() in...
create
方法是从
alterfw/php表单生成器
库生成表单标记

所以当我尝试这个的时候

$form = Form::create('path-to-action.php');
$form->add(Form::text('settings')->setLabel('Settings')->setValue('None'));
echo $form->render();
给我上面提到的错误。对我来说,很难理解为什么即使我没有实例化另一个类,它仍然给出错误

我也是一个不太熟悉作曲家的人,在没有任何指导的情况下深入研究自己

有没有办法让我同时使用这两个库

提示:正如您在这里看到的,没有供应商名称空间的包是一种糟糕的做法。我建议为这两个包创建一个问题,说明它们应该真正添加一个供应商名称空间

这里的问题是,只要您在代码中使用
Form
,类就不会被加载,并且Composer的autoloader也会被执行。因为它有2个包要从中加载类,所以它将选择第一个注册的自动加载规则。这将导致错误的表单类:问题

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

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


TL;DR:您只能在同一个应用程序中使用这两个包中的一个。

表单验证库确实不缺。每个框架都应该有一个组件

因此,我建议您仔细选择您的库

我们这里有第一个库“alterfw/php表单生成器”,它已经有4年历史了,从那时起就没有维护过,直到4个月前它被添加了
composer.json
而分叉。四年前,PHP5.2仍然很常见,所以这段代码没有名称空间也就不足为奇了。它也没有真正的文档,因为自述文件中的链接已失效。此库的分叉存储库不允许创建问题:(我怀疑上游存储库在4年没有维护它之后是否会关心任何事情

第二个库“rlanvin/php表单”似乎与非公共代码有关。您打开了一张向该类添加名称空间的票证,但实际上被拒绝了(说维护人员不会添加名称空间,因为这对他来说更方便,但您可以自己编辑文件来添加名称空间,但这并不会减少名称空间).Packagist显示此库有31次安装。说“没有人使用此代码”并不完全正确,但它非常接近


如果您的任务是表单验证和表单生成,那么我认为Symfony或Zend组件可能会很好地执行这项任务。可能不需要求助于“无人”使用的库,也不需要应用名称空间等现代开发方法(从2009年发布的PHP5.3开始提供).

感谢您的指导和理解。我将在这两个回购协议上创建一个问题。非常感谢。这是一个很棒的提示,解释得很好。非常感谢。根据您的反馈,我有一个问题,我可以在core PHP或其他CMS(例如WordPress自定义插件)中使用Symfony或Zend form generator组件吗?因为我正在为WordPress开发一个插件。你可能应该看看Symfony,然后-我的感觉是,他们仔细地确保你可以单独使用任何组件。你仍然需要处理WordPress无法提供一个简单的、由编写器驱动的安装(上次我看的时候,他们还在讨论如何做,但在某个地方只有一个实验分支)。这会使事情变得有点复杂,但我认为“如何将基于composer的组件集成到wordpress插件中”这个一般性问题在wordpress社区中应该有答案-谷歌搜索或询问。我发现了一个
nette/forms
很好,包括验证服务器和客户端。再次感谢您的帮助。