Zend_form errors
Ik maak met behulp van Zend_form een inlogformulier. Nu wil ik graag de randen rood maken wanneer er een fout is en ik wil graag eigen error_messages.
Ik heb al op google rondgezocht en vind wel dingen met zend_translate e.d. maar dat moet ik niet hebben.
Mijn form ziet er zo uit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
class LoginForm extends Zend_Form
{
public function __construct($options = null)
{
parent::__construct($options);
$this->setName('login');
$gebruikersnaam = new Zend_Form_Element_Text('gebruikersnaam');
$gebruikersnaam ->setLabel('Gebruikersnaam')
->setRequired(true)
->addFilter('StringTrim')
->addValidator('NotEmpty');
$wachtwoord = new Zend_Form_Element_Password('wachtwoord');
$wachtwoord ->setLabel('Wachtwoord')
->setRequired(true)
->addFilter('StringTrim')
->addValidator('NotEmpty');
$submit = new Zend_Form_Element_Submit('submit');
$submit ->setLabel('Login');
$this->addElements(array($gebruikersnaam, $wachtwoord, $submit));
}
}
?>
class LoginForm extends Zend_Form
{
public function __construct($options = null)
{
parent::__construct($options);
$this->setName('login');
$gebruikersnaam = new Zend_Form_Element_Text('gebruikersnaam');
$gebruikersnaam ->setLabel('Gebruikersnaam')
->setRequired(true)
->addFilter('StringTrim')
->addValidator('NotEmpty');
$wachtwoord = new Zend_Form_Element_Password('wachtwoord');
$wachtwoord ->setLabel('Wachtwoord')
->setRequired(true)
->addFilter('StringTrim')
->addValidator('NotEmpty');
$submit = new Zend_Form_Element_Submit('submit');
$submit ->setLabel('Login');
$this->addElements(array($gebruikersnaam, $wachtwoord, $submit));
}
}
?>
Groet
Newb
Gewijzigd op 01/01/1970 01:00:00 door PHP Newbie
http://blog.astrumfutura.com/archives/367-Example-Zend-Framework-Blog-Application-Tutorial-Parts-1-8-Revisited.html
geeft uileg over display groups en custom error messages.
Edit:
Ik ben al wat verder, de error meldingen heb ik voor elkaar. Als er nog een betere oplossing is hoor ik het graag.
Nu zou ik graag nog willen weten hoe het mogelijk is de tekstvelden van een rode rand te voorzien in het geval van een error.
Mijn code nu:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
class LoginForm extends Zend_Form
{
public function __construct($options = null)
{
parent::__construct($options);
$this ->setName('login');
$gebruikersnaam = new Zend_Form_Element_Text('gebruikersnaam');
$gebruikersnaam ->setLabel('Gebruikersnaam')
->setRequired(true)
->addFilter('StringTrim')
->addValidator('NotEmpty', true, array('messages' => array(
'isEmpty' => 'Geef een gebruiksnaam op',
)));
$wachtwoord = new Zend_Form_Element_Password('wachtwoord');
$wachtwoord ->setLabel('Wachtwoord')
->setRequired(true)
->addFilter('StringTrim')
->addValidator('NotEmpty', true, array('messages' => array(
'isEmpty' => 'Geef een wachtwoord op',
)));
$submit = new Zend_Form_Element_Submit('submit');
$submit ->setLabel('Login');
$this ->addElements(array($gebruikersnaam, $wachtwoord, $submit))
->clearDecorators()
->addDecorator('FormElements')
->addDecorator('Form')
->setElementDecorators(array(
array('ViewHelper'),
array('Errors', array('style' => 'color: red')),
array('Label'),
array('HtmlTag'),
));
// buttons do not need labels
$submit->setDecorators(array(
array('ViewHelper'),
array('Description')
));
}
}
?>
class LoginForm extends Zend_Form
{
public function __construct($options = null)
{
parent::__construct($options);
$this ->setName('login');
$gebruikersnaam = new Zend_Form_Element_Text('gebruikersnaam');
$gebruikersnaam ->setLabel('Gebruikersnaam')
->setRequired(true)
->addFilter('StringTrim')
->addValidator('NotEmpty', true, array('messages' => array(
'isEmpty' => 'Geef een gebruiksnaam op',
)));
$wachtwoord = new Zend_Form_Element_Password('wachtwoord');
$wachtwoord ->setLabel('Wachtwoord')
->setRequired(true)
->addFilter('StringTrim')
->addValidator('NotEmpty', true, array('messages' => array(
'isEmpty' => 'Geef een wachtwoord op',
)));
$submit = new Zend_Form_Element_Submit('submit');
$submit ->setLabel('Login');
$this ->addElements(array($gebruikersnaam, $wachtwoord, $submit))
->clearDecorators()
->addDecorator('FormElements')
->addDecorator('Form')
->setElementDecorators(array(
array('ViewHelper'),
array('Errors', array('style' => 'color: red')),
array('Label'),
array('HtmlTag'),
));
// buttons do not need labels
$submit->setDecorators(array(
array('ViewHelper'),
array('Description')
));
}
}
?>
Gewijzigd op 01/01/1970 01:00:00 door PHP Newbie
boink
edit: ik zat ff snel te googelen, en als je op zend+add+class googlet kom je er wel uit
Gewijzigd op 01/01/1970 01:00:00 door Tamara
En hoe doen we dat?
Het toevoegen van een class aan de label tag is geen enkel probleem, maar dit moet pas gebeuren op het moment van een error, en daar zit hem het probleem ;-)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
class MyValid_Form extends Zend_Validate_Abstract
{
public function isValid($formData)
{
$isValid = parent::isValid($formData);
if(!$isValid)
{
$errors = $this->getErrors();
foreach($errors as $fn => $error)
{
if(empty($error)) continue;
$el = $this->getElement($fn);
$dec = $el->getDecorator('HtmlTag');
$dec->setOption('class', 'witherrors');
}
}
return $isValid;
}
}
?>
class MyValid_Form extends Zend_Validate_Abstract
{
public function isValid($formData)
{
$isValid = parent::isValid($formData);
if(!$isValid)
{
$errors = $this->getErrors();
foreach($errors as $fn => $error)
{
if(empty($error)) continue;
$el = $this->getElement($fn);
$dec = $el->getDecorator('HtmlTag');
$dec->setOption('class', 'witherrors');
}
}
return $isValid;
}
}
?>
Deze heb ik opgeslagen: application/controllers/helpers/isValid.php
Mijn formulier ziet er intussen zo uit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
class LoginForm extends Zend_Form
{
public function __construct($options = null)
{
$this->addElementPrefixPath('MyValid', 'controllers/helpers/', Zend_Form_Element::VALIDATE);
parent::__construct($options);
$this ->setName('login');
$gebruikersnaam = new Zend_Form_Element_Text('gebruikersnaam');
$gebruikersnaam ->setLabel('Gebruikersnaam')
->setRequired(true)
->addFilter('StringTrim')
->addValidator('NotEmpty', true, array('messages' => array(
'isEmpty' => 'Geef een gebruiksnaam op',
)));
$wachtwoord = new Zend_Form_Element_Password('wachtwoord');
$wachtwoord ->setLabel('Wachtwoord')
->setRequired(true)
->addFilter('StringTrim')
->addValidator('NotEmpty', true, array('messages' => array(
'isEmpty' => 'Geef een wachtwoord op',
)));
$submit = new Zend_Form_Element_Submit('submit');
$submit ->setLabel('Login');
$this ->addElements(array($gebruikersnaam, $wachtwoord, $submit));
}
}
?>
class LoginForm extends Zend_Form
{
public function __construct($options = null)
{
$this->addElementPrefixPath('MyValid', 'controllers/helpers/', Zend_Form_Element::VALIDATE);
parent::__construct($options);
$this ->setName('login');
$gebruikersnaam = new Zend_Form_Element_Text('gebruikersnaam');
$gebruikersnaam ->setLabel('Gebruikersnaam')
->setRequired(true)
->addFilter('StringTrim')
->addValidator('NotEmpty', true, array('messages' => array(
'isEmpty' => 'Geef een gebruiksnaam op',
)));
$wachtwoord = new Zend_Form_Element_Password('wachtwoord');
$wachtwoord ->setLabel('Wachtwoord')
->setRequired(true)
->addFilter('StringTrim')
->addValidator('NotEmpty', true, array('messages' => array(
'isEmpty' => 'Geef een wachtwoord op',
)));
$submit = new Zend_Form_Element_Submit('submit');
$submit ->setLabel('Login');
$this ->addElements(array($gebruikersnaam, $wachtwoord, $submit));
}
}
?>
Maar er wordt geen class neergezet bij de velden met een error...
Gewijzigd op 01/01/1970 01:00:00 door PHP Newbie
zoek ze op in zend_validate_ en wijzig ze daar.
Nee, dat wil ik niet. De error messages zijn dynamisch en wil ik dus aan kunnen passen in het Model. Maar dat gedeelte werkt wel. Ik wil nu dus een mooie border om de velden met een error.
Poef