1

这是因为我想在同一个项目中开发一个包含多个应用程序的 Web 平台。


在任何 MVC Web 应用程序中,我们都应该有这个默认的 URL 模式:

domain/// controller_ action_parameters

1:在 Zend 中,我可以做什么(在哪些文件中)更改此模式以在application名称前添加controller名称?

预期结果domain://// application_controlleractionparameters

2:如何实现这个新 URL 块的结果,即我将为每个应用程序分离 MVC,将共享资源维护在单独的目录中?我可以在 Zend 中进行哪些更改autoloader

预期结果:

/public_html/
/public_html/platform
/public_html/platform/apps

/public_html/platform/apps/base (user interface container)

/public_html/platform/apps/crm
/public_html/platform/apps/crm/model
/public_html/platform/apps/crm/view
/public_html/platform/apps/crm/control
/public_html/platform/apps/crm/public
/public_html/platform/apps/crm/public/css (and etc.)

/public_html/platform/apps/erp
/public_html/platform/apps/erp/model
/public_html/platform/apps/erp/view
/public_html/platform/apps/erp/control
/public_html/platform/apps/erp/public
/public_html/platform/apps/erp/public/js (and etc.)

/public_html/platform/sys
/public_html/platform/sys/core
/public_html/platform/sys/cfg

/public_html/platform/libs/
/public_html/platform/libs/zend
/public_html/platform/libs/template_it
/public_html/platform/libs/custom
4

1 回答 1

1

我认为这就像拥有实际不同的 ZF2 应用程序一样简单,每个应用程序都在自己的文件夹中,并且在同一级别,一个“供应商”文件夹,您可以在其中放置所有共享结构(来自 zend、第三方库等)。

然后在供应商文件夹中,我将为您自己的共享代码创建另一个文件夹,包括必须由多个应用程序使用的所有模块,因此您的代码是您自己的库。

由于您的应用程序实际上位于域/应用程序中,并且每个人都有自己的配置,因此拥有路由非常简单 domain/application/controller/action/parameters:您只需创建正常 controller/action/parameters的路由,因为应用程序实际上驻留在domain/application/其中,路由器不必关心它。

正如您所注意到的,另一个问题是自动加载器。您只需要为您application.config.php的每个应用程序更新对您内部共享模块的引用

return array(
    'modules' => array( //....
    ),
    'module_listener_options' => array(
        'config_glob_paths'    => array(
            'config/autoload/{,*.}{global,local}.php'
        ),
        'config_cache_enabled' => false,
        'cache_dir'            => 'data/cache',
        'module_paths' => array(
            './module',
            '../vendor',//reference to your library modules
        ),
    ),
  //...
);

当然,如果模块不直接驻留在内部vendor/module而是类似的东西vendor/libraryname/module,您必须查看您的自动加载系统(Composer 自动加载或其他)并将类或命名空间添加到相应的映射中。

于 2014-01-02T17:35:28.773 回答