Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.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
Php 使用Zend Framework创建灵活的基本应用程序_Php_Zend Framework_Web Applications_Modularity - Fatal编程技术网

Php 使用Zend Framework创建灵活的基本应用程序

Php 使用Zend Framework创建灵活的基本应用程序,php,zend-framework,web-applications,modularity,Php,Zend Framework,Web Applications,Modularity,我们正在利用Zend框架开发一个电子商务平台。我们使用相同的代码库启动并运行了多个应用程序实例。配置设置用于区分不同的商店 我们面临的挑战是,我们希望保持通用平台的现状,并对其进行扩展,而不是使用上述配置方法。通用平台(或基础应用程序)应包含通用控制器、模型和视图。特定于特定实例的自定义功能(控制器、模型和视图)应包含在单独的扩展中,并以插入核心平台的方式。通过这种方式,共享代码库保持干净,而不是过度膨胀 有没有人有过这样的经验?有什么最佳实践吗 非常感谢任何指点 我们使用的软件即服务应用程序听

我们正在利用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自动加载引用。