# 500 系統錯誤處理器
[Edit This Page](https://github.com/slimphp/Slim-Website/tree/gh-pages/docs/handlers/error.md)
出問題了!你并不能預知錯誤,但你可以預料到。每個 Slime 框架應用程序都有一個錯誤處理器用于接收所有未抓取的 PHP 異常。這個錯誤處理器同樣能接收當前 HTTP 的請求對象和響應對象。這個錯誤處理器必須預備并返回一個適當的響應對象,這個對象會被返回到 HTTP 客戶端。
## 默認的錯誤處理器
默認的錯誤處理器非常基礎。它將響應狀態編碼設置為 `500`,并將響應內容類型設置為 `text/html`,并將一個通用的錯誤信息加入到響應體中。
這個對于生產應用_大概_不太合適。強烈建議你實現專用于你的 Slim 應用程序的錯誤處理器。
默認的錯誤處理程序還可以包括詳細的錯誤診斷信息。要啟用這個功能你需要將 `displayErrorDetails` 設置為 true :
```
$configuration = [
'settings' => [
'displayErrorDetails' => true,
],
];
$c = new \Slim\Container($configuration);
$app = new \Slim\App($c);
```
## 自定義錯誤處理器
Slim 框架應用程序的錯誤處理器是一種 Pimple 服務。你可以通過應用程序容器對自定義 Pimple factory 方法進行定義,來創建自定義的錯誤處理器取代默認的。
有兩種注入處理器的方法:
### Pre App
```
$c = new \Slim\Container();
$c['errorHandler'] = function ($c) {
return function ($request, $response, $exception) use ($c) {
return $c['response']->withStatus(500)
->withHeader('Content-Type', 'text/html')
->write('Something went wrong!');
};
};
$app = new \Slim\App($c);
```
### Post App
```
$app = new \Slim\App();
$c = $app->getContainer();
$c['errorHandler'] = function ($c) {
return function ($request, $response, $exception) use ($c) {
return $c['response']->withStatus(500)
->withHeader('Content-Type', 'text/html')
->write('Something went wrong!');
};
};
```
在這個例子中,我們定義了一個新的 `errorHandler` factory ,它將返回一個 callable 。返回的 callable 接收三個參數:
1. 一個 `\Psr\Http\Message\ServerRequestInterface` 實例
2. 一個 `\Psr\Http\Message\ResponseInterface` 實例
3. 一個 `\Exception` 實例
這個 callable **必須** 返回一個新的 `\Psr\Http\Message\ResponseInterface` 實例,對于給定的異常也是如此。
**務必注意**:下面這三個類型的異常不會被自定義的 `errorHandler` 處理:
* `Slim\Exception\MethodNotAllowedException`: 這個可以用自定義的 [`notAllowedHandler`](/docs/handlers/not-allowed.html) 來處理。
* `Slim\Exception\NotFoundException`: 這個可以用自定義的 [`notFoundHandler`](/docs/handlers/not-found.html) 來處理。
* `Slim\Exception\SlimException`: 這種類型的異常是 Slim 內置的,它的處理不能被覆寫。
### 禁用
要想徹底地禁用 Slim 的錯誤處理器,只需從容器中移除錯誤處理器即可:
```
unset($app->getContainer()['errorHandler']);
```
現在,你需要負責處理所有異常了,因為 Slim 已經不再處理它們。