【问题标题】:Throw error from zend从zend抛出错误
【发布时间】:2014-01-18 05:18:01
【问题描述】:

我正在使用 zend 框架创建 API。 zend框架有什么机制可以抛出错误吗?

类似弗拉皮的东西

throw new Frapi_Error('Internal Server Error');

一种方法是抛出异常,捕获它并作为 json 响应返回。但是那样我必须在 try and catch 块中编写代码。

人们通常使用什么来从 zend 抛出错误?

【问题讨论】:

  • 您只有throw 异常,而不是错误。
  • 抛出异常,然后附加一个监听器来捕获异常并向用户显示适当的消息
  • 我可以创建一个单独的类来监听所有类的抛出异常并在返回响应给用户之前调用这个类吗?因为这样我就不必在所有类中都写 catch。
  • @BSThakrar,是的。你可以使用set_exception_handler
  • 好的。谢谢。我会试试这个并等待 zend 发布任何内置的错误处理机制。

标签: php zend-framework error-handling zend-framework2 throw


【解决方案1】:

您可以根据需要创建自己的自定义异常类。

   /**
 * Create a class to test the exception
 */
class TestException
{
    public $var;

    const THROW_NONE    = 0;
    const THROW_CUSTOM  = 1;
    const THROW_DEFAULT = 2;

    function __construct($avalue = self::THROW_NONE) {

        switch ($avalue) {
            case self::THROW_CUSTOM:
                // throw custom exception
                throw new MyException('1 is an invalid parameter', 5);
                break;

            case self::THROW_DEFAULT:
                // throw default one.
                throw new Exception('2 is not allowed as a parameter', 6);
                break;

            default: 
                // No exception, object will be created.
                $this->var = $avalue;
                break;
        }
    }
}


// Example 1
try {
    $o = new TestException(TestException::THROW_CUSTOM);
} catch (MyException $e) {      // Will be caught
    echo "Caught my exception\n", $e;
    $e->customFunction();
} catch (Exception $e) {        // Skipped
    echo "Caught Default Exception\n", $e;
}

【讨论】:

  • 我喜欢为此创建一个类的想法。有什么方法可以让我不必从我想抛出异常的地方编写这个 try/catch 块?
【解决方案2】:

Zend Framework 2 中没有专门的“错误处理机制”,而且永远不会有。错误是Exception,需要这样处理。

既然您已经谈到返回响应,我假设某种 API。在这种情况下,您可能想查看zfcamput\ZF\ApiProblem 以及在闪亮的Apigility 中使用该东西。您可能想进一步阅读 Matthews 精彩文章中关于 API 的主题

ZF2 本身也会捕获所有异常,并最终在错误页面中返回它们。但实际上任何时候都不应该发生/向用户显示异常。因此,编写专门的 try/catch 语句并告诉用户如何解决问题是您能做的最好的方法。

【讨论】:

  • 好的。谢谢,我会试试这个。但是你知道它是否支持 DynamoDB 吗?
  • 这实际上与 DBMS 毫无关系。错误处理是您的应用程序的任务。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
相关资源
最近更新 更多