Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony] problemy z sfValidatorDate (S 1.1)
phpion
post
Post #1





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Witam,
mam drobne problem z rozkminieniem użycia walidatora daty. Otóż mam pole typu text, w którym wpisuję datę. Chciałbym aby:
[*] data była w formacie Y-m-d
[*] nie można było wpisać daty wcześniejszej niż 7 dni od dnia bieżącego
[*] nie można było wpisać daty późniejszej niż 31 dni od dnia bieżącego
Mam takie coś:
  1. <?php
  2. $this->setValidators(array(      
  3.      'send_at'               => new sfValidatorDate(array(
  4.            'date_format' => '/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/',
  5.            'min' => strtotime('+1 week')
  6.        ))
  7.        ));
  8.  
  9.        $this->validatorSchema['send_at']->setMessages(array(
  10.            'required' => 'Podaj datę wysyłki',
  11.            'bad_format'  => 'Data wysyłki powinna mieć format YYYY-MM-DD',
  12.            'min' => 'Minimalny czas wysyłki dla przyjmowanych zleceń to 7 dni od dnia dzisiejszego (minimalny termin to '.date('Y-m-d', strtotime('+1 week')).')',
  13.        ));
  14. ?>

Sprawdzenie wymagalności oraz formatu działa bez zarzutu, natomiast jakiejkolwiek daty bym nie wpisał zawsze otrzymam komunikat o tym, że data jest za wczesna. Jak temu zaradzić? Co robię źle?
I jeszcze przy okazji: jak sprawdzić czy wpisana data faktycznie istnieje? Rozumiem, że przy uruchomieniu 'min' oraz 'max' zostanie to automatycznie sprawdzone ale pytam z czystem ciekawości.

Pozdrawiam,
pion
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
destroyerr
post
Post #2





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

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


Aha.
Cytat
[*] nie można było wpisać daty wcześniejszej niż 7 dni od dnia bieżącego
[*] nie można było wpisać daty późniejszej niż 31 dni od dnia bieżącego

trochę inaczej to zrozumiałem ale ok (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Nie napisałeś z jakiego widżetu korzystasz, a to dość ważne. Domyśliłem się dopiero teraz, że z sfWidgetFormInput. Ma to ogromne znaczenie. Twoje wyrażenie regularne jest jeszcze nie doskonałe, bo skąd walidator ma wiedzieć, na której pozycji jest rok, miesiąc lub dzień? Moim zdaniem tak jest poprawnie:
Kod
/^(?<year>[0-9]{4})-(?<month>[0-9]{2})-(?<day>[0-9]{2})$/


Teraz po wpisaniu np. 2008-09-40, będzie rzucał błędem invalid, a wartości dla min i max będą poprawnie sprawdzane.
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 2.10.2025 - 23:49