Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Zend framework 当我想对第三方ZF2模块进行广泛更改时,如何正确使用它们_Zend Framework_Module_Zend Framework2 - Fatal编程技术网

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

Zend framework 当我想对第三方ZF2模块进行广泛更改时,如何正确使用它们,zend-framework,module,zend-framework2,Zend Framework,Module,Zend Framework2,我想使用一些第三方模块来满足我的大部分需求,但要将它们用于我的特定应用程序,我必须进行一些更改。更具体地说,我使用的是一个提供ACL功能的模块,而该模块又依赖于一个提供用户和角色的模块。模块本身已经具有内置的数据库结构、用户对象定义、角色对象定义、它们之间的关系定义等等。这些模块还有一个验证码,一些带有特定布局的HTML文件,以及其他一些东西 我需要使用ACL,但不是所有其他的东西。因此,我需要定制模块中的内容以满足我的需要,即: 重新构造数据库模式-添加字段,将表之间的关系从一个更改为多个,

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

我需要使用ACL,但不是所有其他的东西。因此,我需要定制模块中的内容以满足我的需要,即:

  • 重新构造数据库模式-添加字段,将表之间的关系从一个更改为多个,从多个更改为多个,添加更多表,删除其他表,等等
  • 更新HTML以添加HTML代码、jQuery代码等
  • 更新验证码以使用其他类
  • 将来可能会更改代码本身生成ACL对象的方式
我的印象是,正确的ZF2方法是扩展模块以修改它以满足我的需要。我看不到一种方法可以轻松地扩展这些模块来进行更改,但也许有一种方法。我担心如果我扩展它,我的扩展将试图撤销或重做许多基本模块已经拥有的东西。换言之,它会变得一团糟。我还可以创建自己的ACL模块

另一个选项是直接编辑模块。我不想在
vendor
文件夹中编辑模块的代码,因为这样做是不可取的,但我基本上想让模块保持原样并开始破解它们

问题:如何使用第三方模块ZF2方式,同时允许我对其进行大量定制

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


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

编辑供应商文件夹下的任何代码或通过复制和粘贴将其合并到awesome应用程序的模块/库/任何文件夹中都不是一个好做法

我想这就是你要找的。您可以像boss一样轻松地使用任何第三方库,当该库不能满足您的需求时,可以使用名称空间扩展需要在您自己的代码库中提供更多功能的类

例如,如果可用的Zend都不足以满足您的需求,那么使用名称空间和现有接口,使用类似的脚手架来扩展/重用/实现它们。例如:

<?php
namespace YourModule\Paginator\Adapter;

use Zend\Paginator\Adapter\AdapterInterface;

class MyAwesomePaginatorAdapter implements AdapterInterface
{
   ...
}