0

次のコードでユーザー入力をフォーマットしようとしています:

$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 はキャッチできないようです。他にどのようなオプションがありますか?

4

2 に答える 2

1

コードで受け取った実際のエラーは、PHP 通知です。catchその時点で例外ではないので、できません。Laravel はクラスIlluminate\Exception\Handlerを定義し、PHP を使用set_error_handler()して PHP エラーを ErrorExceptions に変換します。

コントローラーで try/catch ブロックを使用するには、その領域で自分で例外をスローする (または例外をスローするコードを使用する) 必要があります。ただし、ほとんどの人がコメントしているように、コードで実際に入力を使用する前に、適切な入力チェックとサニテーションを行う必要があります。不十分な入力によって例外がスローされるかどうかは、完全にあなた次第です。

于 2013-09-07T01:20:26.693 に答える