这是因为我想在同一个项目中开发一个包含多个应用程序的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
答案 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自动加载或其他),并添加类或名称空间到相应的地图。