gpt4 book ai didi

php - 如何在不使用 ZF2.. 中的任何 Controller 对象的情况下访问 module.php 中的 Controller 插件?

转载 作者:可可西里 更新时间:2023-11-01 00:40:58 24 4
gpt4 key购买 nike

我想在 module.php 中添加错误处理以在 flash messenger 中添加所有错误消息并重定向到特定页面(在我的要求中):

public function handleError(MvcEvent $e) {
$exception = $e->getParam('exception');
$controller = $e->getTarget();
//echo $exception->getMessage(); exit;
if (!$e->getApplication()->getServiceManager()->get('AuthService')->hasIdentity()) {
$controller->flashMessenger()->addErrorMessage("Session Expired..!!");
return $e->getTarget()->plugin('redirect')->toRoute('auth', array('action' => 'login'));
}

switch ($exception->getCode()) {
case "2003" :
$controller->flashMessenger()->addErrorMessage("Unable to connect database..!!");
break;

default :
$controller->flashMessenger()->addErrorMessage($exception->getMessage());
break;
}

$e->getApplication()->getServiceManager()->get('AuthService')->clearIdentity();
return $e->getTarget()->plugin('redirect')->toRoute('auth', array('action' => 'login'));
}

但在某些错误中,它会在 $e->getTarget() 上抛出对未定义方法插件的调用,因为在某些情况下,错误是在插件绑定(bind)之前生成的。我想要一种无需引用任何 Controller 即可访问 redirect 和 flash messenger 插件 的方法。

最佳答案

在尝试了谷歌上定义的多种方法后,我发现以下方法有效:

public function handleError(MvcEvent $e) {

$exception = $e->getParam('exception');
$sm = $e->getApplication()->getServiceManager();
$flashmessenger = $sm->get('ControllerPluginManager')->get('flashmessenger');
//echo $exception->getMessage(); exit;
if (!$e->getApplication()->getServiceManager()->get('AuthService')->hasIdentity()) {
$flashmessenger->addErrorMessage("Session Expired..!!");
return $sm->get('ControllerPluginManager')->get('redirect')->toRoute('auth', array('action' => 'login'));
}

switch ($exception->getCode()) {
case "2003" :
$flashmessenger->addErrorMessage("Unable to connect database..!!");
break;

default :
$flashmessenger->addErrorMessage($exception->getMessage());
break;
}

$e->getApplication()->getServiceManager()->get('AuthService')->clearIdentity();
return $sm->get('ControllerPluginManager')->get('redirect')->toRoute('auth', array('action' => 'login'));
}

我在这里发布了这些解决方案,这样可以节省其他人再次搜索相同内容的时间。

关于php - 如何在不使用 ZF2.. 中的任何 Controller 对象的情况下访问 module.php 中的 Controller 插件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37804267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com