我正在尝试使用以下代码格式化用户输入:
$userInput="blalalbla";//assume the user is inputing wrong data, they are supposed to input it like "12:30"
try{
$timeStr=explode(":",$userInput);
$time=(new Datetime())->setTime($timeStr[0],$timeStr[1]);
}catch(ErrorException $e){
}
但是,如果输入的格式不正确,laravel4将始终触发ErrorException,我无法捕获它。由于用户输入可能以不同方式出错,我认为这是处理验证的最优雅方式。听起来很荒谬,ErrorExceptions似乎无法捕获。我还有其他选择吗?
答案 0 :(得分:1)
您的代码中收到的实际错误是PHP通知。你不能catch
它,因为它在那个时间点不是例外。 Laravel定义了类Illuminate\Exception\Handler
并使用PHP的set_error_handler()
将PHP错误转换为ErrorExceptions。
要在控制器中使用try / catch块,您必须自己在该区域中抛出异常(或使用抛出异常的代码)。但是,正如大多数人所评论的那样,在实际使用任何代码中的输入之前,您应该进行适当的输入检查和卫生。输入输出异常是否完全取决于你。
答案 1 :(得分:0)
设置全局错误处理程序
set_exception_handler (handler);
function handler($e) {
if($e instanceof TheExceptionYouWantToHandle) {
//then handle it
}
}