我想使用phalcon的内部调试组件:
http://docs.phalconphp.com/en/latest/reference/debug.html#debug-component
<?php
$debug = new \Phalcon\Debug();
$debug->listen();
在那里写道:
必须删除或禁用任何Try / Catch块才能使此组件正常工作。
到目前为止一切顺利,但如何在项目中禁用全局所有异常。目前我没有找到任何解决方案,也许有可能配置phalcon或调试组件。
一些想法?即使你告诉我你没有使用该组件。
答案 0 :(得分:0)
当我们尝试在应用程序中实现集中式异常处理时,这是一个微不足道的问题。
您应该定义应用程序的异常类型,并使它们来自同一个基类。就像所有来自Exception
的PHP异常和来自Phalcon\Exception
的Phalcon异常一样,您应该拥有自己的异常基类,这样您就可以立即更改其行为,更重要的是不要复制在您的代码中尝试/捕获语句。
如果该项目在任何地方都有try / catch语句,我建议您重构异常。如果决定这样做,请查看this library。它非常易于使用并支持Phalcon。
是的,我有你试图禁用你的异常(直接把它们扔给Phalcon \ Debug吧?)而不是集中处理它们。但是通过对我的所有例外进行细分,我可以立即控制他们的行为。例如,在我正在处理的应用程序中,我在基本异常的构造函数中放置了断点,因为它是much more useful而非异常消息。以下是目前的情况:
<?php
namespace MyApp\Exceptions;
use Exception as RawException;
use LogicException;
use Phalcon\Exception as PhException;
abstract class ExceptionBase extends PhException
{
const CODE_UNKNOWN = 1;
/** @var bool Set it to true to see what is going on before the server explodes */
public static $holdYourHorses = false;
/** @var bool Internal flag used to assert that constructor chain was called correctly */
private $baseConstructorCalled = false;
/**
* Base constructor for all managed exceptions.
* @param string $message
* @param int $code
* @param \Exception|null $previous
*/
public function __construct($message = "", $code = self::CODE_UNKNOWN, RawException $previous = null)
{
if(self::$holdYourHorses) {
// In this block we might put some dummy variables with useful values...
// like the requested URI or the amount of memory currently in use
if(function_exists('xdebug_break')) {
xdebug_break();
}
}
$this->baseConstructorCalled = true;
parent::__construct($message, $code, $previous);
}
/**
* This assertion should be called by the main exception handler if the application is NOT running in production.
* @throws \LogicException
*/
public function assertConstructionChain()
{
if(!$this->baseConstructorCalled) {
$nastyBoy = get_class($this);
throw new LogicException("Please ensure that the constructor chain of $nastyBoy is implemented properly!");
}
}
}