Versio

Zend_form errors

Overzicht Reageren

PHP Newbie

PHP Newbie

08/12/2008 16:55:00
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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));
    }
}

?>


Groet
Newb
Gewijzigd op 01/01/1970 01:00:00 door PHP Newbie
 
PHP hulp

PHP hulp

25/05/2012 20:02:00
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Thijs Damen

Thijs Damen

08/12/2008 17:22:00
 
PHP Newbie

PHP Newbie

08/12/2008 17:43:00
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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')
        ));
    }
}

?>
Gewijzigd op 01/01/1970 01:00:00 door PHP Newbie
 
PHP Newbie

PHP Newbie

09/12/2008 15:45:00
Quote Anchor link
boink
 
Tamara

Tamara

09/12/2008 15:50:00
Quote Anchor link
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
Gewijzigd op 01/01/1970 01:00:00 door Tamara
 
PHP Newbie

PHP Newbie

09/12/2008 15:53:00
Quote Anchor link
En hoe doen we dat?
 
Tamara

Tamara

09/12/2008 15:58:00
 
PHP Newbie

PHP Newbie

09/12/2008 16:11:00
Quote Anchor link
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 ;-)
 
Tamara

Tamara

09/12/2008 16:23:00
 
PHP Newbie

PHP Newbie

09/12/2008 16:57:00
Quote Anchor link
Oke, ik moet blijkbaar de isValid() functie overriden. Ik heb dus een nieuwe class:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;
    }
}

?>


Deze heb ik opgeslagen: application/controllers/helpers/isValid.php

Mijn formulier ziet er intussen zo uit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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));
    }
}

?>


Maar er wordt geen class neergezet bij de velden met een error...
Gewijzigd op 01/01/1970 01:00:00 door PHP Newbie
 
Thijs Damen

Thijs Damen

09/12/2008 16:58:00
Quote Anchor link
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.
 
PHP Newbie

PHP Newbie

09/12/2008 17:09:00
Quote Anchor link
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.
 
PHP Newbie

PHP Newbie

10/12/2008 18:57:00
Quote Anchor link
Poef
 



Overzicht Reageren