(数時間後に質問をより説明的に言い換えました)
スタンドアロン (非フレームワーク) 開発でPropel
setters
/を理解するためのちょっとしたアドバイスが必要です。validators
検証に関するドキュメントには次のように記載されています。
バリデーターは、データベースに永続化する前に入力を検証するのに役立ちます。
Propel
...そして、バリデータ メッセージでは、ユーザーが検証に合格しなかったエントリをどこで修正できるかについて、一貫したアドバイスを提供できます。
a の使用例は次のvalidator
とおりです。
$user = new User();
$user->setUsername("foo"); // only 3 in length, which is too short...
if ($objUser->validate()) {
...
setXXX()
これに関して私が見つけた問題は、「それを検証することができない場合はどうすればよいか?」ということです。
列タイプがDATE
あり、訪問者に Web フォームに日付を入力してもらいます。日付を打ち間違えて提出する03/18/20q2
私のカスタムバリデーターの1つがバリデーターメッセージを報告し、修正のためにフォームをもう一度ユーザーに返すことができることを願っていますが、これが最初に発生します:
Fatal error: Uncaught exception 'PropelException' with message 'Error parsing date/time value: '03/18/20q2' [wrapped: DateTime::__construct() [<a href='datetime.--construct'>datetime.--construct</a>]: Failed to parse time string (03/18/aaa) at position 5 (/):
私のテストでは、私CustomValidator
が書いた後、単純なものを取得したり、起動したりすることはできませんでした(たとえば):
$event= new Event();
$event->setDateStart($form_value_for_date); // where values is "03/18/20q2"
その理由は理解できます。フィールドを保存する前であっても、そのフィールドに依存できない場合、新しいオブジェクトを作成して操作しようとしても意味がありません。
これが私に与えるジレンマは次のとおりです。
無効なエントリが原因で致命的なエラーが発生する可能性がある場合、Propel validation
私 (したがってユーザー) の処理が妨げられ、有用なメッセージが返さPropel validation
れます。
Propel
なんらかの理由で、フィールドに予期しない値を指定した場合に何が起こるか、またはそれをどのように処理するかについて、ドキュメントで言及されていません。
これが理にかなっており、入力を 1 か所で検証するだけでよいことを意味する方法を誰かが教えてくれることを願っています。