waLibs 4.x
Aggiungere un waForm
Più o meno, aggiungere un modulo a una pagina di waApplication è uguale a quanto avviene per waMenu e waTable. Almeno per ciò che riguarda l'output (dal server verso il client) la sequenza è la medesima: si crea l'oggetto, lo si istruisce sui requisiti che dovrà possedere, lo si aggiunge come elemento alla pagina e si manda la pagina in output.
Ma la pagina che ospita un modulo possiede, per sua natura, due diversi momenti di vita: una prima volta manda il modulo in output, una seconda volta viene richiamata per gestire i dati di input ed eventualmente consolidarli sulla base dati. E ha quindi bisogno anche di un cappello iniziale nel quale prendere la decisione su quale dei due momenti del ciclo di vita deve espletare.
Creiamo una nuova pagina pagina2.php e, per rispettare gli esempi precedenti, costruiremo tutta la funzionalità all'interno di un unico metodo della pagina, ma va da se che non il è migliore dei costrutti possibili:
<?php
//****************** pagina2.php ***************************************
include __DIR__ . "/testwalibs.inc.php";

class page extends testwalibs
	{
	function doSomething()
		{			
		
		// creazione del modulo...
		$form = new waLibs\waForm(null, $this);

		// creazione del recordset e associazione del recordset al modulo
		$dbconn = $this->getDBConnection($this->fileConfigDB);
	  	$sql = "SELECT * FROM amministrazioni WHERE id_amministrazione=" . $dbconn->sqlInteger(1);
		$form->recordset = $this->getRecordset($sql, $dbconn, 1);
		
	 	// inserimento dei controlli all'interno del modulo
		$form->addInteger("id_amministrazione", "Identificativo", true);
		$form->addText("sigla", "Sigla", false, true);
		$form->addText("nome", "Nome");
		$form->addButton("cmdInvia", "REGISTRA");

		// leggiamo eventuali valori di input (se e' stato fatto submit o 
		// richiesta RPC)
		$form->getInputValues();

		// eseguiamo l'operazione a seconda della scelta dell' utente
		if ($form->isToUpdate())
			{
			// l'utente ha richiesto update  o insert del record
			$form->checkMandatory();
			if (!$form->save(true))
				{
				$this->showDBError($form->recordset->dbConnection);
				}
			// cicla su se stessa
			$this->redirect("pagina2.php");
			}
		
			
		$this->addItem($this->getMenu());
		
		$corpo = "Lorem Ipsum è un testo segnaposto utilizzato nel settore della 
			tipografia e della stampa. Lorem Ipsum è considerato il testo segnaposto standard 
			sin dal sedicesimo secolo, quando un anonimo tipografo prese una cassetta di 
			caratteri e li assemblò per preparare un testo campione. È sopravvissuto non solo 
			a più di cinque secoli, ma anche al passaggio alla videoimpaginazione, pervenendoci 
			sostanzialmente inalterato. Fu reso popolare, negli anni ’60, con la diffusione 
			dei fogli di caratteri trasferibili “Letraset”, che contenevano passaggi del 
			Lorem Ipsum, e più recentemente da software di impaginazione come Aldus PageMaker, 
			che includeva versioni del Lorem Ipsum.";
		$this->addItem($corpo, "corpo");
		$this->addItem("ciao mondo", "titolo");
		
		$this->addItem($form);	
		
		$this->show();
		}

	}

$page = new page();
$page->doSomething();

			
Sempre secondo il solito schema, anche waForm ha un output completamente personalizzabile. Ma non solo: lo è anche l'input. Tutti i valori inseriti nel modulo dall'utente, infatti, vengono filtrati sempre dal medesimo view-object che ha gestito la trasformazione in output, e che naturalmente potete personalizzare. In questo modo è possibile, ad esempio creare dati logicamente uguali ma a partire da funzionalità di input diverse.
Ad esempio: le date, nella UI di default delle waLibs, vengono presentate all'utente sotto forma Bootstrap-component. Può ben darsi che voi o il vostro committente preferiate una modalità di inserimento completamente diversa, che genera un risultato diverso da quello fornito dal controllo di default. Nessun problema: al view-object sarà sottoposto il contenuto ricevuto in HTTP/POST e questi, in corrispondenza del controllo di tipo data, non dovrà fare altro che trasformare il valore inputato dall'utente in un unico controllo di testo, nel formato Y-m-d che si aspetta la classe waForm. Anche la UI di default, per forza di cose, effettua questa conversione.
Il modulo creato in questo esempio sfrutta alcuni macro-metodi che riuniscono diverse istruzioni e permettono di creare velocemente un waForm molto standard. Sono ovviamente a disposizione nell'API anche le singole istruzioni sgranate che permettono un controllo assai più fine nella costruzione del modulo. Inoltre, potete sempre estendere la classe waForm e ridefinire i macro-metodi (quali addtext, per intenderci) affinchè si comportino come piace a voi. Anche in questo caso è buona prassi avere un metodo dell'applicazione che crei e restituisca un oggetto waForm o sua estensione, così come abbiamo già visto per waTable.
P.S.: anche waTable è in grado di gestire input di dati, ma non essendo il suo compito elettivo si approfondirà l'argomento nella documentazione specifica.