簡體   English   中英

Laravel 5軟件包異常未觸發Hander的render方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM