Validando formulario con clase kumbia validate
Esta practica esta basada en la version 1 Spirit beta2 de KumbiaPHP Framework.
Muchas veces necesitamos usar formularios para que una empresa/persona contacte con nosotros a través de nuestra web. Para validar los datos enviados y evitar un mal uso del mismo, el equipo de Kumbia ha desarrollado una nueva clase llamada Validate desvinculada de las validaciones propias de los modelos basados en ActiveRecord.
Para este tutorial necesitaremos como mínimo un controller, un modelo y una vista. Si descargamos el paquete KumbiaPHP del GitHub podemos usar el controller por defecto y su vista.
Modelo: sendform.php
class SendForm {
private $reglas = array();
private $datos = array();
private function __construct($datos) {
$this->datos = $datos;
}
private function __reglas() {
$this->reglas = array(
'NombreCompleto' => array(
'required'=>array('error'=>'Rellene su nombre.'),
'alpha' =>array('error'=>'Nombre incompleto o incorrecto.')
),
'Email' => array(
'required'=>array('error'=>'Rellene el email.'),
'email' => array('error'=>'Email incorrecto.')
),
'Movil' => array(
'required'=>array('error'=>'Rellene el teléfono / móvil.'),
'length' => array('min'=>'9','max'=>'14','error'=>'Teléfono / móvil incorrecto'),
'pattern' => array('regex'=>'[0-9]\+.-\ ', 'error'=>'Teléfono no válido')
),
'Asunto' => array(
'required'=>array('error'=>'Indique un asunto.'),
),
'Mensaje' => array(
'required'=>array('error'=>'Indique un mensaje.'),
'length'=>array('min'=>20, 'error'=>'Si es posible, concrete más en su mensaje.'),
)
);
}
public function mensaje() {
// Contenido del email
$contenido = '<p>Hola,';
$contenido .= '<p>'.$data['NombreCompleto'].' quiere contactar por ';
$contenido .= '<b>'. $data['Asunto'].'</b> y comenta lo siguiente:</p>';
$contenido .= '<p>'.nl2br($data['Mensaje']).'</p>';
$contenido .= '<p><b>Datos de contacto</b></p>';
$contenido .= '<p>Empresa: '.$data['Empresa'];
$contenido .= '<br>Cargo: '.$data['CargoEmpresa'];
$contenido .= '<br>Email: '.$data['Email'];
$contenido .= '<br>Teléfono: '.$data['Movil'].'</p>';
return $contenido;
}
public function enviar() {
$validador = new Validate($this->datos, $this->obtenerReglas());
if (!$validador->exec()) {
$validador->flash();
} else {
// Enviar Formulario
}
}
}
Vista: index.phtml
En nuestra vista debemos añadir los controles para los campos del formulario. Hemos usado la nomenclatura contactar.<field> para agrupar en una única variable los datos del formulario.
<div class="container">
<?php echo Form::open() ?>
<?php View::content() ?>
<fieldset><legend>Contactar</legend>
<?php echo Form::label('Nombre completo:', 'contactar_NombreCompleto') ?> <?php echo Form::text('contactar.NombreCompleto') ?>
<?php echo Form::label('Email:', 'contactar_Email') ?> <?php echo Form::text('contactar.Email') ?>
<?php echo Form::label('Teléfono / Móvil:', 'contactar_Movil') ?> <?php echo Form::text('contactar.Movil') ?>
<?php echo Form::label('Mensaje:', 'contactar_Mensaje') ?> <?php echo Form::textarea('contactar.Mensaje') ?>
<?php echo Form::submit('Enviar') ?>
</fieldset>
<?php echo Form::close() ?>
</div>
Controller: index.phtml
[ En desarrollo ]