Zend_form errors
Heey allemaal,
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:
Groet
Newb
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
lees deze tuto:
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.
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.
Ook daar gebruiken ze de translation...
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:
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
bij de array van de foutmelding een class meegeven aan het tekstveld. met die class kan je dan met css een rode rand geven?
edit: ik zat ff snel te googelen, en als je op zend+add+class googlet kom je er wel uit
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 ;-)
Oke, ik moet blijkbaar de isValid() functie overriden. Ik heb dus een nieuwe class:
Deze heb ik opgeslagen: application/controllers/helpers/isValid.php
Mijn formulier ziet er intussen zo uit:
Maar er wordt geen class neergezet bij de velden met een error...
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
Als je echt je eigen error_messages wilt zonder translate stel ik voor gewoon de files te veranderen?
zoek ze op in zend_validate_ en wijzig ze daar.
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




