Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ZendFramework]Własna przestrzeń klas walidatorów
R4D3K
post
Post #1





Grupa: Zarejestrowani
Postów: 144
Pomógł: 12
Dołączył: 16.03.2007

Ostrzeżenie: (0%)
-----


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 ....
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
melkorm
post
Post #2





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


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.


Ten post edytował melkorm 20.09.2010, 14:05:27


--------------------
Go to the top of the page
+Quote Post
R4D3K
post
Post #3





Grupa: Zarejestrowani
Postów: 144
Pomógł: 12
Dołączył: 16.03.2007

Ostrzeżenie: (0%)
-----


  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
Go to the top of the page
+Quote Post
melkorm
post
Post #4





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


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 );


Ten post edytował melkorm 20.09.2010, 16:29:06


--------------------
Go to the top of the page
+Quote Post
R4D3K
post
Post #5





Grupa: Zarejestrowani
Postów: 144
Pomógł: 12
Dołączył: 16.03.2007

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 16:02