[symfony][doctrine]symfonyの例外について

きっと誰かがトラックバックでフォローしてくれるに違いない。

PHPの例外 - 個々一番のHTTP通信

というわけでsymfony 1.2の例外についてちょっと書いてみます。

先に言っておくと、sfException以外にもただのExceptionだったりLogicExceptionだったりInvalidArgumentExceptionだったりもsymfonyは投げます。いくつかクラスと、例外を投げる状況をみてみます。

sfForm

フォームフレームワークの基底にあるクラスです。

  • LogicException
    • BoundなフォームをembedFormしようとした場合。
  • InvalidArgumentException
    • 存在しないWidgetやValidatorを取得しようとした場合。

sfValidatorFile

ファイルのバリデーションとアップロードを行うクラスです。

  • Exception
    • アップロード時にディレクトリに読み書きの権限が存在しない場合。
  • RuntimeException
    • アップロード時に保存先のディレクトリへのパスが指定されていない場合。
  • InvalidArgumentException
    • カテゴリからMimeTypeを取得する際に、存在しないカテゴリを指定された場合。

sfObjectRoute

モデルと関連づいたルーティングを指定するためのクラスです。

  • InvalidArgumentException
    • 初期化に必要なパラメータが指定されていない場合。
  • LogicException
    • オブジェクトを取得しようとした際にアクセスされたURIの情報がbindされていない場合。
    • ルーティングのタイプと関連のないメソッドが呼び出されようとした場合。

symfonyでは、symfonyの設定などに関わってくるような問題はsfExceptionを継承した例外を投げますが、ユーザの不備によるものについてはそうでない例外も投げます。特にLogicExceptionとInvalidArgumentExceptionはよく見かけます。

ちなみにDoctrineはどうかというと、こいつに関してはみている限りだとほぼDoctrine_Exceptionを継承した例外を投げるようになっています。sfDoctrinePluginはsymfonyの管轄ですのでsfFormDoctrineがファイルでない項目を保存しようとした際にLogicExceptionを投げたりしています。

というわけでsymfonyの例外について少し書いてみました。ポリシーとかはよくわかりません。知ってたら教えてください。