【发布时间】:2019-01-11 22:15:49
【问题描述】:
我想创建海关例外,我想在控制器中捕获和管理它们。但我做不到。
例如
use Exception;
class MyException extends Exception
{
}
在控制器中
public function myFuncion($request){
try{
exceptFunction();
} catch(MyException $e){
repairIt();
}
}
private function exceptFunction(){
throw new MyException('f*ck');
}
这里的问题是catch中的代码永远不会被执行! Laravel 总是把我送到处理程序!我想在控制器中通过我的方式捕获和管理异常!
我希望你能帮助(和教导)我。
谢谢
尼古拉斯
class CajaMovimientoController {
public function anular(AnularCajaMovimientoRequest $request) {
...
if ($movimiento->isIngreso()) {
try {
$this->checkSaldo($movimiento->apertura_id, $movimiento->valores, false);
} catch (Exception $e) {
dd("catch");
return redirect()->back()->with('mensajes', $e->getMessage());
}
dd("anular ingreso");
} else {
$this->checkSaldo($movimiento->apertura_id, $movimiento->valores, true);
dd("anular egreso");
}
}
private function checkSaldo($sessionId, $valores, $ingreso) {
$cajaApertura = CajaApertura::find($sessionId);
$sft = 0;
$sch = 0;
$monto = 0;
foreach ($valores as $valor) {
$monto = $monto + floatval($valor->monto);
if ($valor->cheque_id != null) {
$sch = $sch + floatval($valor->monto);
} else {
$sft = $sft + floatval($valor->monto);
}
}
if (!$ingreso) {
if ($sft > $cajaApertura->efectivo) {
throw new CajaSaldoException('No puede egresar mas efectivo del que posee');
// return redirect()->back()->with('mensajes', 'No puede egresar mas efectivo del que posee');
}
if ($sch > $cajaApertura->cheque) {
throw new CajaSaldoException('No puede egresar mas cheques del que posee');
// return redirect()->back()->with('mensajes', 'No puede egresar mas cheques del que posee');
}
}
for ($i = 0; $i < count($valores); $i++) {
//protected $fillable = ['id','movimiento_id', 'cheque_id', 'monto'
if ($valores[$i]->cheque_id != null) {
$cheque = Cheque::find($valores[$i]->cheque_id);
if ($cheque->caja_id != $cajaApertura->caja_id) {
throw new CajaSaldoException('No puede deshacer. Cheque no está en caja');
}
if ($ingreso) {
if ($cheque->estado != 2) {
throw new CajaSaldoException('No puede reingresar cheque');
}
} else {
if ($cheque->estado != 1) {
throw new CajaSaldoException('No puede egresar cheque');
}
}
}
}
}
}
我的异常类
namespace Prestamos\Exceptions;
use Exception;
class CajaSaldoException extends Exception
{
//
}
【问题讨论】:
-
不需要那种语言。你能不能在你的 catch 块中
dd($e)看看你是否得到了正确的异常?还要抛出你不能做的异常exceptFunction();,它必须是$this->exceptFunction(); -
好的...我很抱歉。 Exception的类型没有问题。我捕获 MyException 还是仅捕获 Exception 都没有关系。它总是把我送到处理程序。如果我把它放到处理程序中它可以工作......但是在处理程序中......我想在控制器中捕获异常。 if ($exception instanceof MyException) { dd('我抓住你'); }
-
如果你在 catch 块内
dd($e);会发生什么?你能看到抛出的异常吗? -
什么都没发生!它把我送到处理程序,我可以在浏览器中看到错误(我没有在 Hanlder 中处理它) 哎呀,看起来出了点问题。 (1/1) MyException 这里是消息和跟踪!
-
如果将
} catch (Exception $e) {更改为} catch (\Exception $e) {会发生什么?
标签: laravel exception controller try-catch