1

这是因为我想在同一个项目中开发一个具有多个应用程序的Web平台。如何将规则添加到Zend URL映射并编写多个MVC路径?


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

domain/controller/action/parameters

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

预期结果: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 
+0

首先第一件事情:您是否使用ZF1或ZF2? – STLMikey

+0

@STLMikey我打算使用最新ZF2,但如果这种情况增加了两个困难,我可以建立一个简单的MVC和使用一些的Zend库,专为DB和PDF。 – PSyLoCKe

+3

ZF2中的每个独立模块都在模块的module.config文件中定义了它自己的路由结构。如果跨模块需要共享结构,则应用程序配置文件将放置在这些位置。 – STLMikey

回答

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自动加载或其他)并将类或名称空间添加到相应的地图。

相关问题