Validaciones Personalizadas - Printable Version +- CodeIgniter Forums (https://forum.codeigniter.com) +-- Forum: General (https://forum.codeigniter.com/forumdisplay.php?fid=1) +--- Forum: Regional User Groups (https://forum.codeigniter.com/forumdisplay.php?fid=25) +--- Thread: Validaciones Personalizadas (/showthread.php?tid=79240) |
Validaciones Personalizadas - ysanchez - 05-16-2021 Saludos a todos, soy nuevo en la programacion en general y estoy comenzando en codeigniter 4, mi problema es que ha la hora de realizar validaciones personalizadas no logro que el campo me valide, el codigo explota por completo y me dice que no es correcta la validacion, en la documentacion explica como hacerlo y trato de realizarlo pero no lo consigo, a continuacion les dejo el ejemplo: tengo un campo en la vista que se llama mes y quiero validar que a la hora de llenar este campo se registre un numero del 1 al 12, en el controlador he realizado esto: public function reglaM($mes,&$error = null){ if((int)$mes<1 && (int)$mes>12){ $error=lang('reglaMeses'); return false; } return true; } y este es el error que me da (reglaM no es una regla de validación válida) Code: use CodeIgniter\Exceptions\ExceptionInterface; tambien lo realizo como explica la documentacion, yo creo un carpeta en app\Validacion y dentro un archivo que se llama MiVal.php, en este archivo porgo lo siguiente: <?php namespace App\Validacion; class Myregla{ public function reglaMeses($mes,&$error = null){ if((int)$mes<1 && (int)$mes>12){ $error=lang('reglaMeses'); return false; } return true; } } ?> en el archivo app\Validation.php dentro de: public $ruleSets = [ \CodeIgniter\Validation\Rules::class, \CodeIgniter\Validation\FormatRules::class, \CodeIgniter\Validation\FileRules::class, \CodeIgniter\Validation\CreditCardRules::class, \App\Validacion\Myregla::class, ]; y en el controlador en las reglas del campo mes: 'meses'=>['label'=>'(Cantidad de Meses Atrasados)','rules'=>'required|numeric|reglaMeses'], y tampoco me lo reconoce codeigniter 4 ya no se que mas hacer, necesito su ayuda. gracias RE: Validaciones Personalizadas - Beewez - 06-04-2021 Porque estas validando de esta manera ? Te dejo un ejemplo de como validar campos $validadores = service('validation'); $validadores->setRules( [ 'Usuario' => 'required', 'Telefono' => 'required', ], ); if (!$validadores->withRequest($this->request)->run()) { # - Redirijo hacia la pagina anterior # - Con withInput envio los valores de entrada para no volver a escribir los valores de los input # - Se estarian enviando los valores del request que llegan a esta funcion. Tambien se envian los errores. Todo eso se envia por una SESSION que genera CI return redirect()->back()->withInput()->with('errors', $validadores->getErrors()); } RE: Validaciones Personalizadas - shadowmx - 06-10-2021 Yo lo que e realizado para aplicar funciones de validación mas fácil las e cargado como Helper para usarlas en cualquier lado para empezar, por ejemplo creo un Helper (validation_helper.php) Dentro creo mi función, en tu caso. PHP Code: if(!function_exists('reglaMeses')){ Sobre el error en respuesta en idiomas (Language) creo dentro dentro de la carpeta de idioma el archivo Validation.php osea que quedaría el archivo con la ruta /app/Language/es/Validation.php el cual el contenido seria para esta funcion: PHP Code: return [ Cargo mi helper en mi BaseController que uso para todos mis controladores o en el controlado que requiera, segun tu gusto. PHP Code: helper['validation'] Y ya en mi Modulo o Controlador donde defina las validaciones lo incorporo. Ejemplo en tu Modelo lo metemos como unas reglas personalizadas a tu gusto: PHP Code: protected $validando_fechas_amigusto = [ Y en mi Controlador que carga el Modelo con las reglas definidas previamente, en la funcion o pagina que lo requiera ya sea post o get, (en mi caso Post) lo valido asi por ejemplo PHP Code: //Controlador XYZ en el Construct llamo mi modelo PHP Code: //Controlador XYZ Y en mi plantilla de vista que esta dentro de la carpeta view cargo la funcion de validator PHP Code: $validation = service('validation') PHP Code: if ($validation->hasError('meses')) Espero te sirva. Saludos |