在SugarCRM中,您可以创建自定义模块(例如MyModule),它们像库存对象一样保存在/ modules中,包含任何默认元数据,视图,语言文件等。对于自定义模块MyModule,您可能有一些东西喜欢:
/modules/MyModule/MyModule.class.php
/modules/MyModule/MyModule.php
/modules/MyModule/language/
/modules/MyModule/metadata
等等,所以一切都很好地定义,所有模块都保持在一起。该模块通过诸如/custom/Extension/application/Include/MyModule.php
之类的文件在系统中注册,其内容类似于:
<?php
$beanList['MyModule'] = 'MyModule';
$beanFiles['MyModule'] = 'modules/MyModule/MyModule.php';
$moduleList[] = 'MyModule';
显然,$beanFiles
数组引用了我们可以找到基本模块的类,通常是SugarBean对象的扩展。最近我被告知我们可以调整该文件的位置以便进行自定义,这在某种程度上是有意义的。将它设置为$beanFiles['MyModule'] = 'custom/modules/MyModule/MyModule.php';
将允许我们通过Module Loader访问基类,即使安全扫描工具阻止核心文件更改,这也将允许我们不完全扩展,但替换库存模块,如帐户或调用,无需修改核心文件并进行系统升级即可清除更改。
所以这是我的问题:这里的最佳做法是什么?我已经和SugarCRM一起工作了好几年,这是我第一次尝试修改$beanFiles
数组。我担心的是,我偏离了这里的最佳实践,并且在某种程度上可以加载文件modules/MyModule/MyModule.php
和custom/modules/MyModule/MyModule.php
,这会导致PHP中的类名冲突(即因为这两个类都被命名为MyModule ...)。显然,任何对该类的引用都需要更新(例如,与该模块一起使用的入口点),但我是否遗漏了任何潜在的后果?
答案 0 :(得分:2)
从技术上讲它应该没问题,但我可以看到如果两者都被引用,核心版本和你的版本都可能发生冲突。这一切都取决于场景,但我更喜欢扩展核心bean并找到堆栈中的某个地方,我可以使用我的自定义版本代替核心bean。几年前我在这里写了一个例子:https://www.sugaroutfitters.com/blog/safely-customizing-a-core-bean-in-sugarcrm
对于大多数用例,有一种方法可以劫持Sugar在给定点使用你的bean。
如果你无法绕过它,你总是可以看到明确包含核心模块的位置,以确保不会发生冲突。