[英]Laravel 5 package exceptions not firing Hander's render method
我正在開發一個程序包,並使用Orchestra / Testbench程序包進行單元測試。
我正在嘗試編寫一個PHPUnit測試,以在引發異常時驗證響應是否正確。 在我的存儲庫中,拋出以下異常:
use Acme\Common\Exceptions\ValidationException;
...
throw new ValidationException($validator);
我已經在程序包的服務提供者中注冊了處理程序類:
$this->app->singleton('Illuminate\Contracts\Debug\ExceptionHandler', 'Acme\Common\Exceptions\Handler');
但是,不會觸發Handler類中的render()方法。 這是render()方法:
public function render($request, Exception $e)
{
if ($e instanceof \Acme\Common\Exceptions\ValidationException) {
$message = implode(' ', array_flatten($exception->getMessages()->toArray()));
$response = array('errorCode' => $exception->getCode());
return \Response::make($response, 400);
}
return parent::render($request, $e);
}
相反,我只是得到了通用異常方法:
Acme\Common\Exceptions\ValidationException: {"key":["The key field is required."]}
我什至把dd()放在render()方法的開頭,但是什么也沒有。 我是否缺少Orchestra Testbench的某種設置?
您是否偶然在此類中重寫了構造函數? 我遇到了完全相同的問題(也試圖捕獲ValidationException),但我沒有意識到自己搞砸了構造函數。 可能發生的情況是某些原因導致發生了未被捕獲的異常(因為它發生在您的異常處理程序中!)。 就我而言,我覆蓋了構造函數,這意味着父類沒有注入Log類,這導致引發異常,並在渲染方法啟動之前暫停了事情。
您通過變量“ $e
”注入Exception-class,但是在您的方法中調用了變量“ $exception
”。
由於未設置$exception
-variable,因此應使用$e
-variable。
public function render($request, Exception $e)
{
if ($e instanceof \Acme\Common\Exceptions\ValidationException) {
$message = implode(' ', array_flatten($e->getMessages()->toArray()));
$response = array('errorCode' => $e->getCode());
return \Response::make($response, 400);
}
return parent::render($request, $e);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.