Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework]Własna przestrzeń klas walidatorów
Forum PHP.pl > Forum > PHP > Frameworki
R4D3K
Witam, postanowiłem sobie stworzyć nową przestrzeń nazw dla validatorów, aby nadpisać funkcjonalność już istniejących i w tej przestrzeni tworzyć własne. W tym celu stworzyłem taką strukturę katalogów w folderze library:
Kod
| library
+--Zend
+-- | PL
      +--Validate


Dalej stworzyłem sobie prosty walidator NotEmpty, który tylko posiada polskie komunikaty błędów, aby spróbować załadować go do egzemplarza Zend_Form:
  1. <?php
  2. require_once 'Zend/Validate/Abstract.php';
  3. /**
  4.  * @category Zend
  5.  * @package Zend_Validate
  6.  * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
  7.  * @license <a href="http://framework.zend.com/license/new-bsd" target="_blank">http://framework.zend.com/license/new-bsd</a> New BSD License
  8.  */
  9. class PL_Validate_NotEmpty extends Zend_Validate_NotEmpty
  10. {
  11. protected $_messageTemplates = array(
  12. self::IS_EMPTY => "Podane pole nie może być puste !!!",
  13. self::INVALID => "Niewłaściwa wartość",
  14. );
  15.  
  16. }

i forma:
  1. <?php
  2.  
  3. class Application_Form_Forma extends Zend_Form
  4. {
  5.  
  6. public function init()
  7. {
  8. $this->setAction('#');
  9. $this->setMethod('post');
  10. $this->addElement('text', 'x1', array(
  11. 'required' =>TRUE,
  12. 'label' =>'Test NotEmpty :',
  13. 'validators'=>array(
  14. array('validator'=>'NotEmpty')
  15. )
  16. ));
  17. $this->addElement('submit', 'submit', array(
  18. 'label'=>'OK'
  19. ));
  20. }
  21. }


Dokładnie chodzi mi o linijkę:
  1. 'validators'=>array(
  2. array('validator'=>'NotEmpty')
  3. )

W jaki sposób załadować w ten sposób validatory z własnej przestrzeni nazw questionmark.gif dodam, że próbowałem użyć takiej konstrukcji:
  1. $this->addElement('text', 'x1', array(
  2. 'required' =>TRUE,
  3. 'label' =>'Test NotEmpty :',
  4. 'validators'=>array(
  5. array('validator'=>'PL_Validate_NotEmpty')
  6. )
  7. ));

to otrzymałem komunikat :
Kod
An error occurred
Application error
Exception information:

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

No i niestety nie wiem w jaki sposób załadować walidatory z własnej przestrzeni nazw ....
melkorm
Przez
  1. $el->addValidator(); // instancje klasy New Pl_....


@edit:

Cytat
Dalej stworzyłem sobie prosty walidator NotEmpty, który tylko posiada polskie komunikaty błędów, aby spróbować załadować go do egzemplarza Zend_Form:


Wystarczy że użyjesz Zend_Translate I wrzucisz go do Rejestru lub przekażesz do Form'a, tam wystarczy dać np:
Kod
'kluczBłędu' => 'Wiadomosć błędu'


A tu link.
R4D3K
  1. $el->addValidator(); // instancje klasy New Pl_....


Rozumiem czyli powinienem tworzyć elementy za pomocą createElement i w sposób obiektowy dodawać validatory ? W jaki sposób melkorm Ty to robisz questionmark.gif
melkorm
Np.
  1. $element = new Zend_Form_Element_File('article_photo');
  2. $element->addValidator( new Zend_Validate_File_Extension('jpeg, png, jpg, gif, bmp') );
  3. $element->addFilter( new Ext_Filter_File_Rename( $element->getFileName() ) );
  4. $element->addFilter( new Ext_Filter_File_Resize( 800 ) );
  5. $element->setDestination( Zend_Registry::get('appConf')->uploaddir->photos ) ;
  6. $element->setRequired( false );
  7. $element->setLabel( 'article_photo' );
  8. $this->addElement( $element );
R4D3K
Jeśli ktoś by szukał to można to zrobić również sposobem zaprezentowanym wyżej przez mnie :
  1. $this->addElement('text', 'x1', array(
  2. 'required' =>TRUE,
  3. 'label' =>'Test NotEmpty :',
  4. 'validators'=>array(
  5. array('validator'=>new PL_Validate_NotEmpty())
  6. )
  7. ));

Ten sposób przyda się zwłaszcza wtedy, jeśli tworzymy własny walidator np walidator NIPu
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.