desmart/response-exception

此包已被弃用且不再维护。未建议替代包。

Laravel4的响应异常

1.1.0 2014-02-21 11:44 UTC

This package is auto-updated.

Last update: 2022-02-01 12:24:57 UTC


README

Laravel4的响应异常是一个返回响应的异常。

安装说明

desmart/response-exception作为依赖添加到composer.json文件中

{
  "require": {
    "desmart/response-exception": "1.1.*"
  }
}

使用composer update更新您的包或使用composer install进行安装。

要添加错误处理器,请将'DeSmart\ResponseException\ResponseExceptionServiceProvider',添加到app/config/app.php文件中的 providers 中。

另一种添加处理器的方式是在app/filters.php中添加App::error()

App::error(DeSmart\ResponseException\ErrorHandlerFactory::make());

请记住,要在其他App::error()处理器注册之后添加它。

为什么?

让我们看看desmart/laravel-layout。它是一个复杂的控制器,调用许多动作。

在其中一个动作中进行重定向相当痛苦。那是因为每个动作只返回更大的响应的一部分。唯一返回将覆盖大部分的响应的方式是抛出异常。

这不是最好的设计(异常不是为了这个!),但它有效,并有机会从应用的最小部分生成完整的响应。

用例

此包对标准的Laravel应用无用。可能最适合与desmart/laravel-layout一起使用,因为它的控制器非常复杂。

在边缘情况下,它也可以用于某些部分的应用在控制器分发期间需要发送自己的响应的情况。

示例

use DeSmart\ResponseException\Exception as ResponseException;

ResponseException::make('foo'); // sends 'foo' response

// There's an option to make chained exceptions
ResponseException::chain(Redirect::to('/'))
  ->withInput()
  ->fire();

技巧

Laravel中响应可以在请求周期的许多部分返回

  • 路由之前(App::before()
  • 在路由分发期间
  • 抛出异常时(App::error

我们的技巧是利用App::error()。当错误处理器返回一个值时,该值被视为响应并返回给客户端。

由于抛出异常会中断正常的代码执行,因此这是快速提供响应的最佳方式。

有一个问题。每个异常都会记录到文件中。唯一绕过它的方法是将错误处理器作为最后一个注册。Laravel将每个错误处理器放在处理程序堆栈的顶部。当其中一个返回响应时,其他处理器将不会调用。