如何将规则添加到Zend URL映射并组成多个MVC路径?

时间:2013-10-15 01:40:54

标签: php zend-framework zend-framework2 zend-framework-routing

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


在任何MVC Web应用程序中,我们都应该使用此默认URL架构:

domain / controller / action / parameters

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

预期结果:domain / application / controller / action / parameters

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

1 个答案:

答案 0 :(得分:1)

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

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

由于您的应用实际上位于域/应用中,并且每个人都有自己的配置,因此拥有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自动加载或其他),并添加类或名称空间到相应的地图。