CakePHP3で例外処理を書きたい
例外処理。
最初のうちは何が何だかよくわからず、結構ノリで書きがちですよね。
意図通りに動いてはいるんですが、正直、自分は今でもこの書き方で合っているのか不安です。
まず定義、意味を整理してから、その書き方を説明できればと思います。
【自分の環境】
macOS Catalina
PHP7.4.2
CakePHP3.8
MAMP5.7
Apache2.2
MySQL5.7
例外処理の定義、意味
以下のサイトでは「想定内のエラーが起きたときにする処理」とあります。
https://wa3.i-3-i.info/word1427.html
※このサイトはわかりにくいIT用語をざっくり理解できるのでおすすめです。
あらかじめ予想できるエラーを処理する仕組み、と言ってもいいでしょうか。
例えばファイルアップロードの時に、ファイルが空だったら…とか、拡張子がおかしかったら…とか、いろいろな予想できるパターンをあらかじめ潰そうという仕組みなような気がします。
実際の書き方
よく言われるのが、例外処理と言えばtry-catch構文というやつですよね。
自分はif文もセットだと思っているのですが、確かではありません。(違ったら教えてください。)
以下に実例を示します。
public function index() { try{ // アップロードファイル名が空文字かチェック if($upload_file['name'] !== '') // 成功時 }else{ // 失敗時 throw new \Exception('ファイルを選択してください。'); } }catch(Exception $e){ // ここに例外が発生した際の処理を書く $this->Flash->error($e->getMessage()); } }
こんなかんじです。
tryの中を処理して行って、「throw new \Exception('云々');」に当たったら、catchに移るという仕組みです。
この場合はif文でアップロードファイル名が空文字かチェックして、空文字じゃないなら何もしません。
普通に処理を抜けられます。
逆に空文字なら「throw new \Exception('ファイルを選択してください。');」に当たって、catchに移ります。
catchではフラッシュメッセージで先ほどの「ファイルを選択してください。」を表示するような処理をしています。
これで予想できるエラーがあったら止める、つまりエラーを潰せるわけですね。
終わりに
以上となります。
簡単ではありましたが、このtry-catch構文とif文で、発生の予想がつくエラーは潰せるのではないでしょうか。
他にもやり方があるという方は是非コメントいただけるとありがたいです。
ありがとうございました。