[Zend Framework] Custom Validator

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Sspruijt
  • Registratie: Mei 2007
  • Laatst online: 12:33
Goedenavond heren,

Ik ben heel de avond al aan het stoeien met een specifiek probleem. Ik ben met een website bezig met het Zend Framework en ben met een registreer-form bezig. Dat werkt allemaal redelijk, maar waar ik niet uitkom is het gebruiken van een custom validator voor in mijn geval het username-veld. Om te beginnen krijg ik de volgende foutmelding:

Message: Plugin by name 'Username' was not found in the registry; used paths: Custom_Validate_: Custom/Validate/ Zend_Validate_: Zend/Validate/

Mijn eigen validator heeft de bestandsnaam Username.php en staat in de map /Custom/Validate/ . Dit is allemaal zoals het hoort.

Hier wat code uit het form:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public function init()
    {
        $this->addElementPrefixPath('Custom_Validate', 'Custom/Validate/','validate');
        
        // Set the method for the form to POST
        $this->setMethod('post');

        // Add textbox for a username
        $this->addElement('text', 'username', array(
            'label'      => 'Gebruikersnaam:',
            'required'   => true,
            'filters'    => array('StringTrim'),
            'validators' => array(
                                array('validator' => 'Username'),
                                array('validator' => 'StringLength', 'options' => array(5, 20)),                            
                            )
        ));


Het pad word goed gezet, want in de foutmelding geeft hij wel aan dat hij in de juiste map aan het zoeken was.

Hier nog even de code van de validator:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
require_once 'Zend/Validate/Abstract.php';

class Custom_Validate_Username extends Zend_Validate_Abstract
{
    const EXISTS = 'usernameExists';

    protected $_messageTemplates = array(
        self::EXISTS => 'Deze gebruikersnaam is helaas al in gebruik.',
    );
    
    public function isValid($value){
        $this->_setValue($value);
        $validator = new Zend_Validate_Db_NoRecordExists('pll_users', 'username');
        if (!$validator->isValid($value)) {
            $this->_error(self::EXISTS);
            return false;
        } else {
            return true;
        }
    }
}


Ik heb me al rot gezocht en verschillende dingen geprobeerd. Ik heb het veld al omgeschreven naar een echt object en de methode $element->setValidator() gebruikt. Dit haalt echter niks uit. Ook heb ik geprobeerd om de validator in andere mappen te plaatsen, zelfs in de Zend lib zelf. Overal geeft hij wel aan dat hij in de juiste map gezocht heeft, maar de foutmelding blijft verschijnen. Het gebruiken van alleen de custom validator heeft ook geen resultaat.
Wanneer ik zelf handmatig een instantie van de validatorklasse probeer te maken loopt het helemaal in de soep. Het zou echt via de Plugin_loader moeten gaan, maar ik kom er echt niet uit waarom de klasse niet geladen word.

Bedankt.

Acties:
  • 0 Henk 'm!

  • wackmaniac
  • Registratie: Februari 2004
  • Laatst online: 11-09 10:21
Niet heel erg veel ervaring met Zend, maar zoals het bij mij werkte:

PHP:
1
2
$username_validator = new Custom_Validate_Username ();
$formelement->addValidator( $username_validator );


Met tussendoor misschien nog een paar opties toevoegen aan de validator. Ik hoefde hiervoor niets aan het register toe te voegen oid.

[ Voor 9% gewijzigd door wackmaniac op 15-09-2009 08:59 ]

Read the code, write the code, be the code!


Acties:
  • 0 Henk 'm!

  • japaveh
  • Registratie: Maart 2003
  • Laatst online: 10:41

japaveh

Jield BV

Ik heb het op de volgende manier gewoon werkend gekregen

PHP:
1
2
3
4
/Add a validator which forces the enddate to be after the startdate
        $endDate->addPrefixPath('LBM_Form_Validate', 'LBM/Form/Validate/', 'validate');
        $endDate->addValidator('AfterStartDate', true, array(
            'startDate'));

Solo Database: Online electronic logbook and database system for research applications


  • Freeaqingme
  • Registratie: April 2006
  • Laatst online: 12:39
Kan het zijn dat Custom niet in je include path staat?

No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.


  • Sspruijt
  • Registratie: Mei 2007
  • Laatst online: 12:33
Nee dit lijkt me niet het geval. De mappen Zend en Custom staan samen naast elkaar in de map library, welke wel in het include_path staat. Ook kan ik uit de foutmelding opmaken dat er wel in juiste map word gezocht.