Tho*_*ham 2 php zend-config zend-framework2
我正在学习ZF2并计划申请.
我想有1个应用程序与几组模块.每组模块最多可包含20多个模块.
我无法保证整个应用程序的任何模块的唯一名称,但我可以保证他们在模块组中的唯一性.
理想情况下使用Hosting路由器将请求路由到模块组.
例如 http://admin.mysite.com/foo/ =>'Admin/Foo/Index/Index',
http://special.mysite.com/foo/ =>'Special/Foo/Index/Index'
想法#1
我希望为每个模块组使用不同的module_path,并为模块组周围的模块路径命名空间,以确定模块类的唯一性.但发送到module_autoloader的模块似乎只关注传递的任何字符串的第一部分.
例如
array('modules' => array(
'Admin\Admin','Admin\Bob','Admin\Users'
));
Run Code Online (Sandbox Code Playgroud)
这是我不明白的奇怪行为:
我已经设法通过对templateInjecter的一些小改动来解决这个问题,但它似乎很乱.
想法#2
只需将模块名称添加到其子目录中,例如
namespace AdminAdmin\Controller,
class IndexController {}
Run Code Online (Sandbox Code Playgroud)
思考
题:
我对你的问题的解释是你真的问了两个问题:
这可能是ZF2原生的.在ZF2模块基本上只是PHP的命名空间,所以一个名为模块Foo\Bar是完全可以接受的,并且默认模块加载器会为它的模块类module/Foo/Bar则vendor/Foo/Bar.
例如,如果您想创建一个模块Anvil并在命名空间Acme下,您将创建一个目录module/Acme/Anvil,并在其中创建一个Module.php文件:
<?php
namespace Acme\Anvil;
class Module
{
/* module class code goes here */
}
Run Code Online (Sandbox Code Playgroud)
在您的应用程序中,config/application.config.php您将添加Acme\Anvil到modules密钥:
return array(
'modules' => array(
'Application',
'Acme\Anvil',
),
// Remaining bits of config array are unchanged
);
Run Code Online (Sandbox Code Playgroud)
您可以采取的一种方法是修改站点的引导程序,index.php以根据主机名即时修改配置.例如,使用ZendSkeletonApplication,您可以设置application.config.php文件,如下所示:
<?php
return array(
'modules' => array(
'Application',
// Other modules common to all sites go here
),
'sites' => array(
'site-one.mydomain.com' => array(
'modules' => array(
'ModuleOne',
'ModuleTwo',
),
),
'site-two.mydomain.com' => array(
'modules' => array(
'ModuleThree',
),
),
),
// Remaining bits of config array are unchanged
);
Run Code Online (Sandbox Code Playgroud)
为了完成这项工作,我们稍作修改,public/index.php以拦截从中加载的配置数组config/application.config.php并重新配置modules密钥:
// Pick host out of request
$hostname = $_SERVER['HTTP_HOST'];
// Load application configuration
$applicationConfig = require 'config/application.config.php';
// Merge site-specific modules into loaded modules array
$applicationConfig['modules'] = array_merge(
$applicationConfig['modules'],
$applicationConfig['sites'][$hostname]['modules']
);
// Run the application!
Zend\Mvc\Application::init($applicationConfig)->run();
Run Code Online (Sandbox Code Playgroud)
此方法提供了一种简单的方法来更改为特定主机名加载的模块,但可以轻松扩展以允许特定于站点的配置文件自动加载和特定于站点的模块目录.
| 归档时间: |
|
| 查看次数: |
1189 次 |
| 最近记录: |