5
RedbeanPHPでの検証にFUSEモデルを使用するというアイデアが気に入っています。Redbeanでの検証PHP
私のアプリケーションでは、複数のソース(フォーム、ファイルなど)を介してデータを受け入れる必要があることがあるため、実際のクラスの更新時に検証を行うことは意味があります。
Redbeanサイトの例を見ると、検証は例外をスローすることに基づいているようです。
もちろん例外は1つしか投げることができないので、個々のフィールドに関連付けられた検証メッセージを保持するために、FUSEクラスに "array"という型の追加プロパティを作成する必要があると仮定しています。
もっと良いアイデアはありますか?ここで私はこれまでにしようとしてきたものだ...
<form action="" method="post">
<p>your name: <input name="name" type="text"></p>
<p>your email: <input name="email" type="text"></p>
<p>your message:</p>
<textarea name="message" id="" cols="30" rows="10"></textarea>
<input name="send" value="send message" type="submit">
</form>
<?php
/**
* @property $name string
* @property $email string
* @property $message string
*/
class Model_Comment extends RedBean_SimpleModel{
public $invalid = array();
public function update(){
if(empty($this->name)) $this->invalid['name'] = "field is empty";
if(empty($this->email)) $this->invalid['email'] = "field is empty";
if(empty($this->message)) $this->invalid['message'] = "field is empty";
if(count($this->invalid) > 0) throw new Exception('Validation Failed!');
}
public function getInvalid(){
return $this->invalid;
}
}
if(isset($_POST['send'])){
$comment = R::dispense('comment');
/* @var $comment Model_Comment */
$comment->import($_POST,'name,email,message');
try{
R::store($comment);
}
catch(Exception $e){
echo $e->getMessage();
$invalid = $comment->getInvalid();
print_r($invalid);
exit;
}
echo '<p>thank you for leaving a message.</p>';
}
echo "<h2>What people said!</h2>";
$comments = R::find('comment');
/* @var $comments Model_Comment[] */
foreach($comments as $comment){
echo "<p>{$comment->name}: {$comment->message}</p>";
}
?>
興味深いアプローチ:次に
、あなたのモデルは次のようになります。私は例外クラスを拡張することを決めたと思う。 – christian