我正在使用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();
给我上面提到的错误。对我来说很难理解为什么即使我实例化另一个类仍然会给出错误。
我也不太熟悉作曲家在没有任何指导的情况下深入挖掘自己。
那么有什么方法可以同时使用这两个库吗?
答案 0 :(得分:4)
提示:没有供应商名称空间的软件包是一种不好的做法,您可以在此处看到。我建议为两个软件包创建一个问题,说它们应该真正添加供应商名称空间。
此处的问题是,只要在代码中使用Form
,该类就已经加载,并且会执行Composer的自动加载器。由于它有两个加载类的包,它将选择第一个注册的自动加载规则。这导致错误的Form类:问题!
您可以在composer.json
中交换包裹位置,但这意味着其他类别不再可用。
另一个解决方案是使用require()
/ require_once()
PHP函数自己要求该类。这是一个不好的做法,也意味着你只能使用2个Form
类中的一个(要求其他表格类在一个已经被要求后产生一个"名为&#34的类;表格&#34 ;已存在" PHP错误)。
TL; DR :您只能在同一个应用程序中使用其中一个包。
答案 1 :(得分:1)
表单验证库确实不缺。每个框架都应该有一个组件。
所以我建议您仔细选择您的图书馆。
我们这里有第一个库" alterfw / php-form-generator",这是4年之久,从那时起一直没有维护,直到它在4个月前加入composer.json
分叉。四年前,PHP 5.2仍然很常见,因此这段代码没有命名空间也就不足为奇了。它也没有真正的文档,因为自述文件中的链接已经死了。此库的分叉存储库不允许创建问题。 :(我怀疑上游存储库会在4年后不关心任何事情。
第二个图书馆" rlanvin / php-form"似乎与非公共代码有关。你打开了一个将命名空间添加到那个类的故障单,并且有效地被拒绝了(说维护者不会添加命名空间,因为它对他来说更方便,但你可以自己编辑文件来添加它只是不切断它)。 Packagist显示该库有31个安装。说#34;没有人使用此代码"并不完全正确,但它非常接近。
如果您的任务是表单验证和表单生成,我会说Symfony或Zend组件可能会很好地执行该任务。可能没有必要诉诸图书馆" nobody"使用,并且不应用像命名空间这样的现代开发方法(自2009年发布的PHP 5.3起可用)。