Me gusta la idea de usar modelos FUSE para la validación en RedbeanPHP.Validación en Redbean PHP
Mis aplicaciones a veces requieren la aceptación de datos a través de múltiples fuentes (formulario, archivo, etc.), por lo que tiene sentido poner la validación en la actualización de la clase real.
Mirando los ejemplos en el sitio Redbean, la validación parece estar basada en lanzar una excepción.
Por supuesto, solo puedes lanzar una excepción, así que supongo que necesitaría crear una propiedad adicional de tipo "array" en mi clase FUSE para guardar los mensajes de validación asociados con campos individuales.
¿Alguien tiene alguna idea mejor? Esto es lo que he estado tratando hasta ahora ...
<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>";
}
?>
enfoque interesante. Sin embargo, creo que he decidido extender la clase de excepción. – christian