1 commenti CodeIgniter, php

 

In un precedente articolo ho già trattato la Form Validation Class di Codeigniter mostrandone il semplice meccanismo di funzionamento.

In quella sede fu esposto il funzionamento del metodo set_rules() che consentiva indicare come terzo parametro le funzioni filtro (ad esempio trim, htmlspecialchar, md5) e una o più regole di validazione fra quelle build-in previste dal framework.

 

Callback function

Ma se vogliamo aggiungere un nostro metodo di validazione personalizzato, costruito sulla base di nostre specifiche esigenze, occorrerà sviluppare una callback function. Facciamo come al solito un esempio, spesso molto più chiaro di tante parole.

Per iniziare realizziamo una view banalissima che conterrà il nostro form che, per semplicità, avrà un unico campo di testo ed il submit.

Quindi avremo una view, collocata al seguente percorso /application/view/form.php e con il seguente contenuto:

<html>
<head>
<title>Form example</title>
</head>
<body>
	<form method="post" action="<?php echo site_url('/example/process_submit'); ?>">
		
	<input type="text" name="example" />
	<input type="submit" name="invia" />
	
	</form>

</body>
</html>

 

Immagginiamo di avere l'esigenza di dover validare tale campo e di attenderci un valore numerico maggiore o uguale a 5.

Creiamo un controller Example da collocare al segente percorso /application/controllers/example.php e al suo interno avremo tre medodi:

  1. index() farà visualizzare la view con il nostro form;
  2. process_submit() processerà i dati inviati con il nostro form;
  3. _maggiore_di_cinque() che sarà il nostro metodo di validazione, ovvero la callback function.

 

<?php
Class Example extends CI_Controller{
	public function index(){
		// show form
		$this->load->helper('url');
		$this->load->view('form');	
		}
		
	public function process_submit(){
		$this->load->library('form_validation');
		/*
		indichiamo i metodi di validazione e 
		per richiamare la funzione _maggiore_di_cinque
		basta mettere il nome della funzione 
		con il suffisso con "callback_" 
		*/
		$this->form_validation->set_rules('example', 'example', 'required|callback__maggiore_di_cinque');
		if ($this->form_validation->run() == FALSE){
			echo validation_errors();
			}
		else{
			echo 'valid submission';
			}
		}
		
	public function _maggiore_di_cinque($num){
		// condizione/regola di validazione
		if(!is_numeric($num) OR $num<5){
			/* 
			settiamo il messaggio di errore indicando i due parametri:
			- la funzione a cui deve essere associato il messaggio di errore
			- il messaggio testuale
			*/
			$this->form_validation->set_message('_maggiore_di_cinque', 'Il campo %s deve essere un numero maggiore di cinque.');
			return FALSE;
			}
		return TRUE;
		}

}

 

 

I commenti al codice sono esplicativi.

Vorrei, però, far notare un aspetto fondamentale: il metodo _maggiore_di_cinque() deve essere necessariamente di tipo public (potenzialmente accessibile tramite URL) ma l'underscore _ a prefisso del nome ci assicura che il metodo non sia eseguibile tramite URL.

 

Di tale aspetto ne ho parlato in un precedente articolo in cui si discuteva circa l'impiego degli indicatori di visibilità, public protected e private, nonchè del prefisso underscore apposto al nome dei metodi in CodeIgniter.

Olimpio Romanella

Sono un appassionato di Web Developing con un particolare debole per php. Mi dedico principalmente dello sviluppo back-end ed in particolare programmazione lato server con php, sviluppo di database relazionali MySql e progettazione di CMS di piccole e medie dimensioni.

Mi avvalgo del framework javascript Jquery, utilizzando molti dei suoi plugin e nei dei miei progetti utilizzo spesso il framework MVC Codeigniter.

1 Commenti presenti

avatar pino

pino

11 January 2014 ore 16:02

bravo!