Diferencia entre revisiones de «Validando formulario con clase kumbia validate»
(Página creada con «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 nosotro...») |
|||
Línea 3: | Línea 3: | ||
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. | 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. | + | 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 y sólo nos quedaría crear el modelo. |
− | + | === Modelo: sendform.php === | |
<source lang=php line> | <source lang=php line> | ||
Línea 11: | Línea 11: | ||
private $reglas = array(); | private $reglas = array(); | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
private function __reglas() { | private function __reglas() { | ||
$this->reglas = array( | $this->reglas = array( | ||
'NombreCompleto' => array( | 'NombreCompleto' => array( | ||
− | 'required'=>array('error'=>' | + | 'required'=>array('error'=>'Indique su nombre.'), |
'alpha' =>array('error'=>'Nombre incompleto o incorrecto.') | 'alpha' =>array('error'=>'Nombre incompleto o incorrecto.') | ||
), | ), | ||
'Email' => array( | 'Email' => array( | ||
− | 'required'=>array('error'=>' | + | 'required'=>array('error'=>'Indique su email.'), |
'email' => array('error'=>'Email incorrecto.') | 'email' => array('error'=>'Email incorrecto.') | ||
), | ), | ||
'Movil' => array( | 'Movil' => array( | ||
− | 'required'=>array('error'=>' | + | 'required'=>array('error'=>'Indique su teléfono / móvil.'), |
− | 'length' => array('min'=>'9','max'=>' | + | 'length' => array('min'=>'9','max'=>'17','error'=>'Teléfono / móvil incorrecto'), |
− | 'pattern' => array(' | + | 'pattern' => array('regexp'=>'/^\+(?:[0-9] ?){6,14}[0-9]$/','error'=>'Teléfono incorrecto. Formato ejemplo. +34 862929929') |
), | ), | ||
'Asunto' => array( | 'Asunto' => array( | ||
Línea 40: | Línea 33: | ||
'Mensaje' => array( | 'Mensaje' => array( | ||
'required'=>array('error'=>'Indique un mensaje.'), | 'required'=>array('error'=>'Indique un mensaje.'), | ||
− | 'length'=>array('min'=> | + | 'length'=>array('min'=>100, 'error'=>'Si es posible, concrete más en su mensaje.'), |
) | ) | ||
); | ); | ||
− | |||
} | } | ||
− | + | // Envio de datos para generar email | |
− | + | public function enviar($datos) { | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | $validador = new Validate($datos, $this->reglas); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | $validador = new Validate($ | ||
if (!$validador->exec()) { | if (!$validador->exec()) { | ||
$validador->flash(); | $validador->flash(); | ||
} else { | } else { | ||
− | + | ||
+ | $mensaje = $this->crearMensaje($datos); | ||
+ | |||
} | } | ||
Línea 81: | Línea 57: | ||
</source> | </source> | ||
− | + | ===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. | 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. | ||
Línea 89: | Línea 65: | ||
<div class="container"> | <div class="container"> | ||
<?php echo Form::open() ?> | <?php echo Form::open() ?> | ||
− | |||
<?php View::content() ?> | <?php View::content() ?> | ||
− | |||
− | |||
<fieldset><legend>Contactar</legend> | <fieldset><legend>Contactar</legend> | ||
<?php echo Form::label('Nombre completo:', 'contactar_NombreCompleto') ?> <?php echo Form::text('contactar.NombreCompleto') ?> | <?php echo Form::label('Nombre completo:', 'contactar_NombreCompleto') ?> <?php echo Form::text('contactar.NombreCompleto') ?> | ||
Línea 98: | Línea 71: | ||
<?php echo Form::label('Teléfono / Móvil:', 'contactar_Movil') ?> <?php echo Form::text('contactar.Movil') ?> | <?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::label('Mensaje:', 'contactar_Mensaje') ?> <?php echo Form::textarea('contactar.Mensaje') ?> | ||
− | |||
<?php echo Form::submit('Enviar') ?> | <?php echo Form::submit('Enviar') ?> | ||
</fieldset> | </fieldset> | ||
− | |||
<?php echo Form::close() ?> | <?php echo Form::close() ?> | ||
− | |||
</div> | </div> | ||
− | |||
</source> | </source> | ||
− | + | ===Controller: index.phtml=== | |
<source lang=php line> | <source lang=php line> | ||
+ | |||
+ | Load::model('sendform'); | ||
+ | class IndexController extends AppController | ||
+ | { | ||
+ | |||
+ | public function index() | ||
+ | { | ||
+ | // Verificamos que se envian datos desde el formulario | ||
+ | if (Input::hasPost('contactar')) { | ||
+ | |||
+ | $form = new SendForm(); | ||
+ | // Procesamos envio de formulario | ||
+ | if ($form->enviar(Input::post('contactar'))) { | ||
+ | // Si se envia correctamente, limpiamos el formulario para evitar reenvios | ||
+ | Input::delete('contactar'); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
</source> | </source> | ||
+ | |||
+ | ===Notas finales=== | ||
+ | |||
+ | Este tipo de validaciones a nivel de servidor son una excelente herramienta para asegurarnos que los datos llegan correctamente. Validate también se puede combinar con la librería Filter para evitar inyecciones de código o ataques malicioso basados en formularios. | ||
[ En desarrollo ] | [ En desarrollo ] |
Revisión del 11:32 3 mar 2015
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 y sólo nos quedaría crear el modelo.
Modelo: sendform.php
class SendForm {
private $reglas = array();
private function __reglas() {
$this->reglas = array(
'NombreCompleto' => array(
'required'=>array('error'=>'Indique su nombre.'),
'alpha' =>array('error'=>'Nombre incompleto o incorrecto.')
),
'Email' => array(
'required'=>array('error'=>'Indique su email.'),
'email' => array('error'=>'Email incorrecto.')
),
'Movil' => array(
'required'=>array('error'=>'Indique su teléfono / móvil.'),
'length' => array('min'=>'9','max'=>'17','error'=>'Teléfono / móvil incorrecto'),
'pattern' => array('regexp'=>'/^\+(?:[0-9] ?){6,14}[0-9]$/','error'=>'Teléfono incorrecto. Formato ejemplo. +34 862929929')
),
'Asunto' => array(
'required'=>array('error'=>'Indique un asunto.'),
),
'Mensaje' => array(
'required'=>array('error'=>'Indique un mensaje.'),
'length'=>array('min'=>100, 'error'=>'Si es posible, concrete más en su mensaje.'),
)
);
}
// Envio de datos para generar email
public function enviar($datos) {
$validador = new Validate($datos, $this->reglas);
if (!$validador->exec()) {
$validador->flash();
} else {
$mensaje = $this->crearMensaje($datos);
}
}
}
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
Load::model('sendform');
class IndexController extends AppController
{
public function index()
{
// Verificamos que se envian datos desde el formulario
if (Input::hasPost('contactar')) {
$form = new SendForm();
// Procesamos envio de formulario
if ($form->enviar(Input::post('contactar'))) {
// Si se envia correctamente, limpiamos el formulario para evitar reenvios
Input::delete('contactar');
}
}
}
}
Notas finales
Este tipo de validaciones a nivel de servidor son una excelente herramienta para asegurarnos que los datos llegan correctamente. Validate también se puede combinar con la librería Filter para evitar inyecciones de código o ataques malicioso basados en formularios.
[ En desarrollo ]