Php 防止在Zend Framework 2中合并两个模块配置
我的ZF2应用程序中有两个模块,两个模块都有各自不同的配置,并且两个模块都有不同的module.php,其中包含不同的配置Php 防止在Zend Framework 2中合并两个模块配置,php,zend-framework,zend-framework2,zend-config,Php,Zend Framework,Zend Framework2,Zend Config,我的ZF2应用程序中有两个模块,两个模块都有各自不同的配置,并且两个模块都有不同的module.php,其中包含不同的配置 我有一个Admin登录过程,在Module.php中定义如下: 在onBootstrap功能中: public function onBootstrap($e) { $e->getApplication()->getEventManager()->getSharedManager()->attach('Zend\Mv
我有一个Admin登录过程,在Module.php中定义如下: 在onBootstrap功能中:
public function onBootstrap($e) {
$e->getApplication()->getEventManager()->getSharedManager()->attach('Zend\Mvc\Controller\AbstractActionController', 'dispatch', function($e) {
$controller = $e->getTarget();
$controllerClass = get_class($controller);
$moduleNamespace = substr($controllerClass, 0, strpos($controllerClass, '\\'));
if ('Admin' === $moduleNamespace) {
$controller->layout('layout/admin');
}
}, 100);
$application = $e->getApplication();
$eventManager = $application->getEventManager();
..........
..........
$eventManager->attach(MvcEvent::EVENT_DISPATCH, array($this, 'boforeDispatch'), 100);
}
boforeDispatch函数,在onBootstrap
中调用,用于登录过程检查
function boforeDispatch(MvcEvent $event) {
......
//did something
......
}
每当我要运行前端模块时,Admin模块的PreforeDispatch函数都在运行。我还试图在Front模块中定义另一个函数,但里面没有任何内容,因此它无法合并它
2. 我为这两个模块编写了不同的404模板,但Front的模板正在运行。这是密码
'view_manager' => array(
'display_not_found_reason' => true,
'display_exceptions' => true,
'doctype' => 'HTML5',
'not_found_template' => 'error/404',
'exception_template' => 'error/index',
'template_map' => array(
'layout/front' => __DIR__ . '/../view/layout/layout.phtml',
'front/index/index' => __DIR__ . '/../view/front/index/index.phtml',
'error/404' => __DIR__ . '/../view/error/404.phtml',
'error/index' => __DIR__ . '/../view/error/index.phtml',
),
'template_path_stack' => array(
__DIR__ . '/../view',
),
),
这两个文件都位于具有相同结构的模块文件夹中。
问:如何防止将一个模块配置与另一个模块配置合并?您不应该阻止合并。加载两个模块的不同布局时也存在类似问题-请看一看 不幸的是,您的问题有点矛盾,因为如果您有一个404页面,就无法知道它是什么模块-因为它被称为404页面未找到 无论如何,您可以调度MvcEvent::EVENT\u dispatch\u ERROR事件,并使用正则表达式URL检查并设置不同的视图文件 代码示例 在您的管理模块配置中
'template_map' => array(
'error-admin/404' => __DIR__ . '/../view/error/404.phtml',
),
而不是在事件\u分派\u错误时插入逻辑
public function onBootstrap(MvcEvent $e)
{
$app = $e->getTarget();
$em = $app->getEventManager();
$em->attach(MvcEvent::EVENT_DISPATCH_ERROR, function (\Zend\Mvc\MvcEvent $e) {
$app = $e->getParam('application');
$uri = $app->getRequest()->getUri()->getPath();
if(strpos($uri, '/admin') === 0){
$view = new \Zend\View\Model\ViewModel();
$view->setTemplate('error-admin/404');
$e->setViewModel($view);
}
});
}
你不应该阻止合并。加载两个模块的不同布局时也存在类似问题-请看一看 不幸的是,您的问题有点矛盾,因为如果您有一个404页面,就无法知道它是什么模块-因为它被称为404页面未找到 无论如何,您可以调度MvcEvent::EVENT\u dispatch\u ERROR事件,并使用正则表达式URL检查并设置不同的视图文件 代码示例 在您的管理模块配置中
'template_map' => array(
'error-admin/404' => __DIR__ . '/../view/error/404.phtml',
),
而不是在事件\u分派\u错误时插入逻辑
public function onBootstrap(MvcEvent $e)
{
$app = $e->getTarget();
$em = $app->getEventManager();
$em->attach(MvcEvent::EVENT_DISPATCH_ERROR, function (\Zend\Mvc\MvcEvent $e) {
$app = $e->getParam('application');
$uri = $app->getRequest()->getUri()->getPath();
if(strpos($uri, '/admin') === 0){
$view = new \Zend\View\Model\ViewModel();
$view->setTemplate('error-admin/404');
$e->setViewModel($view);
}
});
}
经过多次搜索,我找到了问题的答案。 主要问题是获取模块名。这是我的密码。 我在
MvcEvent::getRouteMatch()->getParam()的帮助下生成了它
经过多次搜索,我找到了问题的答案。
主要问题是获取模块名。这是我的密码。
我在MvcEvent::getRouteMatch()->getParam()的帮助下生成了它
第一个问题呢?那个行为是正常的,你们不应该改变它。。在beforeDispatch()函数中,您应该绕过前端模块的逻辑,例如,if($module!=='Front'){return true;}否则执行代码…第一个问题呢?该行为是正常的,您不应该更改它。。在beforeDispatch()函数中,您应该绕过前端模块的逻辑,例如,if($module!=='Front'){return true;}否则执行代码。。。