webForumDet fria alternativet

Blogga med Zend Framework - Del 7: Zend_Form och Zend_Validate

Webbutveckling

0 svar · 3 412 visningar · startad av jme

Medlem sedan maj 20012 237 inlägg
Frågan#1

Zend_Form har två huvudsakliga funktioner: generering av färdiga formulär samt validering av formulärdata. Följande exempel tagen ur bloggen skapar ett inloggningsformulär:

class Form_LoginForm extends Zend_Form
{
...
	$this->setAction('/login');
	$this->setMethod('post');

	$username = $this->createElement('text', 'username');
	$username->setLabel('Username');

	$password = $this->createElement('password', 'password');
	$password->setLabel('Password');

	$submit = $this->createElement('submit', 'submit');
	$submit->setLabel('Login');

	$this->addElement($username);
	$this->addElement($password);
	$this->addElement($submit);
...
}

Ovanstående formulär kan sedan visas genom:

// genererar ett inloggningsformulär med textfält för användarnamn och lösenord samt en submit-knapp
echo $this->form->render();

Den andra viktiga funktionen är validering av formulärdata. Du kan lätt lägga till valideringsregler som bestämmer att användarnamnet måste vara 6-20 bokstäver långt och måste innehålla minst en siffra (varför just en siffra låter vi läsaren avgöra).

Valideringen görs t.ex. på följande sätt:

if($form->isValid($_POST) )
{
	echo "Form is valid";
}
else
{
	echo "Nay!";
}

Zend_Validate

Zend_Validate hjälper dig med validering av formulärdata. Dessa nämndes redan ovan.

Låt oss återigen ta ett exmpel från bloggen (se klassen Form_CreateForm (blog/controllers/models/Form) ):

// skapar ett textfält för rubriken
$topic = $this->createElement('text', 'topic');
$topic->setLabel('Topic');

// rubrikens längd: 3 eller fler tecken
$topicLengthValidator = new Zend_Validate_StringLength(3); 
// alternativt felmeddelande
$topicLengthValidator->setMessage('The topic is too short', Zend_Validate_StringLength::TOO_SHORT);
// Vi kan ha flera validatorer till samma fält

$topicValidator = new Zend_Validate();

$topicValidator->addValidator($topicLengthValidator, false);
$topicValidator->addValidator($topicContentValidator, false);

$topic->addValidator($topicValidator);

Själva valideringen:

...
if($form->isValid($data) ) // $data är $_GET eller $_POST
{
	...
}

Valideringsklasserna kan också användas utan Zend_Form. Detta får dock bli en extrauppgift för läsaren.

247 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)