当我想对它们进行大量更改时,如何正确使用第三方ZF2模块

时间:2013-11-14 19:02:03

标签: zend-framework module zend-framework2

我想使用一些第三方模块来满足我的需求,但是要将它们用于我的特定应用程序,我必须做一些更改。更具体地说,我使用的是提供ACL功能的模块,反过来,该模块依赖于用户和角色提供模块。模块本身已经内置了数据库结构,定义了用户对象,定义了角色对象,定义了它们之间的关系,等等。这些模块还有一个验证码,一些带有特定布局的HTML文件,以及其他一些东西。

我需要使用ACL而不是所有其他东西。所以我需要定制模块中的东西以满足我的需求,即:

  • 重构数据库架构 - 添加字段,将表之间的关系从一对多更改为多对多,添加更多表,删除其他表等等。
  • 更新HTML以添加HTML代码,jQuery代码等
  • 更新验证码以使用其他类
  • 将来可能会改变代码生成ACL对象的方式

我认为正确的ZF2方式是扩展模块以修改它以满足我的需要。我没有看到一种方法来轻松扩展这些模块来进行更改,但也许有一种方法。我担心如果我扩展它,我的扩展将试图撤消或重做基本模块已有的很多东西。换句话说,它会变得凌乱。我不妨创建自己的ACL模块。

另一种选择是直接编辑模块。我不想在vendor文件夹中编辑模块的代码,因为这样做是不可取的,但我基本上想要按原样使用模块并开始攻击它们。

  

问题:如何使用第三方模块ZF2方式,同时允许我对它们进行大量自定义?

现在我正在考虑将模块按原样复制,将其内容复制到我的ZF2的module文件夹中,并将它们用作我自己的ZF2应用程序内部的模块。然后,它们将被检入与我的主应用程序代码相同的版本控制。

我看到的唯一可能的缺点是,如果模块由原作者更新并且我想要他们的更新,我将需要手动复制它们并合并它们,或使用类似git补丁或{{1 }}。

1 个答案:

答案 0 :(得分:2)

编辑位于供应商文件夹下的任何代码,或者将它们合并到您真棒应用程序的模块/库/任何文件夹中。粘贴不是一个好习惯。

我认为composer正是您所寻找的。您可以非常轻松地使用任何第三方库,比如老板,当该库不能满足您的要求时,可以使用名称空间扩展需要在您自己的代码库中提供更多功能的类。

例如,如果Zend的可用pagination adapters都不足以满足您的要求,则使用类似的脚手架,使用命名空间和现有接口来扩展/重新使用/实现它们。例如:

<?php
namespace YourModule\Paginator\Adapter;

use Zend\Paginator\Adapter\AdapterInterface;

class MyAwesomePaginatorAdapter implements AdapterInterface
{
   ...
}

在典型的ZF2应用程序中,您可以对由composer管理的每个库执行完全相同的操作。真的有很多good libraries on packagist

我认为另一个好方法是分支一个现有的第三方库,它托管在像github这样的流行服务中。将该库分配到您的帐户,需要在项目的composer.json中提供您自己的fork源(非原始版本)。

另一方面,在您的工作环境中为分叉的第三方库克隆创建另一个项目。在您自己的帐户下克隆,编辑,改进和管理该库,将其与项目和原始源分开。

当你认为你所做的改进真的是岩石的时候,通过打开别人的拉动请求回到原来的图书馆。