Php 使用Zend Framework创建灵活的基本应用程序
我们正在利用Zend框架开发一个电子商务平台。我们使用相同的代码库启动并运行了多个应用程序实例。配置设置用于区分不同的商店 我们面临的挑战是,我们希望保持通用平台的现状,并对其进行扩展,而不是使用上述配置方法。通用平台(或基础应用程序)应包含通用控制器、模型和视图。特定于特定实例的自定义功能(控制器、模型和视图)应包含在单独的扩展中,并以插入核心平台的方式。通过这种方式,共享代码库保持干净,而不是过度膨胀 有没有人有过这样的经验?有什么最佳实践吗Php 使用Zend Framework创建灵活的基本应用程序,php,zend-framework,web-applications,modularity,Php,Zend Framework,Web Applications,Modularity,我们正在利用Zend框架开发一个电子商务平台。我们使用相同的代码库启动并运行了多个应用程序实例。配置设置用于区分不同的商店 我们面临的挑战是,我们希望保持通用平台的现状,并对其进行扩展,而不是使用上述配置方法。通用平台(或基础应用程序)应包含通用控制器、模型和视图。特定于特定实例的自定义功能(控制器、模型和视图)应包含在单独的扩展中,并以插入核心平台的方式。通过这种方式,共享代码库保持干净,而不是过度膨胀 有没有人有过这样的经验?有什么最佳实践吗 非常感谢任何指点 我们使用的软件即服务应用程序听
非常感谢任何指点 我们使用的软件即服务应用程序听起来与您的平台类似,在我们的案例中,所有实例数据都存储在实例自己的数据库中 至于处理定制功能(代码),如果它完全是定制的,那么我想将定制代码模块化或打包到一个容器中是有意义的,该容器可以被客户的唯一标识符引用,并根据需要加载代码。这对于模块来说很简单,但如果您想要单独的控制器甚至动作,则显然更复杂
一些系统内置了自己的事件/回调系统,允许注入功能,尽管这在公共API中更常见。编辑:我没有注意到各种注释。因此,定制的代码不在单个包中,它添加了功能,并且不会覆盖 这里的问题是,您提到的代码没有覆盖任何内容,而是添加了功能。您可能会看到某种形式的插件系统,其中您会读取带有类名的配置文件。这些类将提供关于每个插件的信息(例如,如果您的UI使用选项卡,它将具有选项卡名称的属性) 这实际上取决于每个实现的功能不同。获得更多信息以提供高级解决方案可能会有所帮助
我使用PHP自动加载(请参阅:)的方式会根据类名创建单独的文件夹。这可能有助于将代码从其他实现中分离出来。我最近在我的代理机构研究了相同的问题,我目前正在测试的解决方案涉及以下应用程序文件夹结构:
app/
default/
controllers/
models, etc
ecommerce/
controllers/
models, etc
lib/
S24/
ComponentCode.php
modules/
ecommerce/
admin/
controllers/
models, etc
default/
controllers/
models, etc
data, public web, temp, other ZF folders
其想法是,通用组件代码存储在库中,模块化应用程序存储在模块中,单个客户端网站代码存储在应用程序中
lib/S24
和modules/ecommerce
文件夹是通用的,每个项目都是相同的(我们支持这些文件夹)
app
是一个模块目录,因此default
和ecommerce
文件夹在ZF中创建模块<代码>应用程序/默认值
用于默认(即无模块)控制器app/ecommerce
将包含一组控制器,这些控制器仅扩展模块/ecommerce/default/controllers
中的控制器
// Add Controller folder
$front->addControllerDirectory('/path/to/modules/ecommerce/admin/controllers', 'ecommerceAdmin');
// Add route
$router->addRoute(
'ecommerceAdmin',
new Zend_Controller_Router_Route('admin/ecommerce/:controller/:action',
array('module' => 'ecommerceAdmin',
'controller' => 'index',
'action' => 'index'))
);
然后,如果愿意,您可以扩展应用程序/电子商务/控制器中的功能,或添加新功能
由于我们希望保持模块管理系统不变,并且还支持多个管理系统(在URL中,如www.domain.com/admin/ecommerce和www.domain.com/admin/user),因此我们直接从模块
文件夹为模块化管理系统提供服务。然后可以将任何自定义管理员页面添加到app/admin/controllers
// Add Controller folder
$front->addControllerDirectory('/path/to/modules/ecommerce/admin/controllers', 'ecommerceAdmin');
// Add route
$router->addRoute(
'ecommerceAdmin',
new Zend_Controller_Router_Route('admin/ecommerce/:controller/:action',
array('module' => 'ecommerceAdmin',
'controller' => 'index',
'action' => 'index'))
);
正如我所说,我目前正在测试这一点,但我希望它能为您自己的系统提供一些想法。一旦我完全稳定下来,我希望就这个话题写一篇博客文章 谢谢你的回复!自定义功能完全是定制的,因此不应将其合并到核心代码库中。通常,自定义功能包括控制器、动作、模型和视图。理想情况下,我们正在寻找的解决方案是一种使用自定义控制器、模型等扩展现有Zend Framework web应用程序的方法。谢谢!我将查看您的PHP自动加载引用。