我在REST API项目中使用ZendFramework 3。因此,几乎没有模块和插件可以检查授权状态。如果授权失败,则抛出异常。
使用try .. catch分别无法在每个控制器中处理它。我如何拦截和处理异常并生成这样的JSON输出?
{
message: "Access denied",
reason: "Your token is incorrect"
}
我是ZendFramework的新手,这就是为什么我不知道如何做到这一点。官方文件没有说明这一点。
答案 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
],
],
这就是全部。现在,每个错误都会执行您的自定义逻辑。