如何拦截ZendFramework 3中的异常

时间:2017-01-30 12:51:50

标签: php exception-handling zend-framework3

我在REST API项目中使用ZendFramework 3。因此,几乎没有模块和插件可以检查授权状态。如果授权失败,则抛出异常。

使用try .. catch分别无法在每个控制器中处理它。我如何拦截和处理异常并生成这样的JSON输出?

{
    message: "Access denied",
    reason: "Your token is incorrect"
}

我是ZendFramework的新手,这就是为什么我不知道如何做到这一点。官方文件没有说明这一点。

1 个答案:

答案 0 :(得分:2)

触发default framework Events包括事件 MvcEvent :: EVENT_DISPATCH_ERROR 。因此,您应该做的就是在该错误事件上附加侦听器并返回JSON响应。

首先,您需要在module.config.php中注册监听器

<?php

$i = 0; // <--- Added this
while($row = mysqli_fetch_array($query))
{
$i++; // <--- Added this
?><tr class="danger"><?php
echo "<td>". $i . "</td>"; // <--- Added this
echo "<td>" . $row['name'] . "</td>";
echo "<td>" . $row['money'] . "</td>";
echo "<td>" . $row['score'] . "</td>";
echo "<td>" . $row['kills'] . "</td>";
echo "<td>" . $row['deaths'] . "</td>";
echo "<td>" . $row['uniform'] . "</td>";
echo "<td>" . $row['vest'] . "</td>";
echo "<td>" . $row['last_updated_at'] . "</td>";
echo "</tr>";
}
echo "</table>";

mysqli_close($con);
?>

其次,创建文件类Api / Listener / ApiListener.php

// In my case module name is Api
'listeners'          => [
    Api\Listener\ApiListener::class    // Register the class listener
],
'service_manager'    => [
    'invokables' => [
        // Register the class (of course you can use Factory)
        Api\Listener\ApiListener::class => Api\Listener\ApiListener::class
    ],
],

这就是全部。现在,每个错误都会执行您的自定义逻辑。