Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony] Lokalizacja liczb
Theqos
post
Post #1





Grupa: Zarejestrowani
Postów: 49
Pomógł: 8
Dołączył: 5.12.2008

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


Witam,

Doszedłem w swoim projekcie do problemu lokalizacji liczb zmiennoprzecinkowych. O ile niemam problemu z ich wyswietlaniem, format_number wyswietla mi przecinek odcielajacy czesc dziesietna od calkowitej, to juz przy wprowadzaniu danych mam problem. sfNumberValidator przyjmuje mi tylko wartosci z kropka, a z przecinkiem traktuje jako NaN. No i brakuje czegos takiego jak sfI18N::getDateForCulture dla liczb. Dodatkowo przy edycji jakiejs liczby, wartosc domyslna rowniez jest z kropka (object_input_tag widocznie nierespektuje ustawien lokallizacji).

Narazie uzywam symfony 1.0. Nie znam jeszcze nowego frameworka formularzy z 1.2, ale z tego co widze w kodzie validatora (sfValidatorNumber.class.php) to rowniez nie intersuja go ustawienia lokalizacji. Dlatego chcialbym sie spytac jak wy radzicie sobie w takiej sytuacji, bo niechce zmuszac userow do wprowadzania kwot z kropkami smile.gif

Pozdrawiam.

Ten post edytował Theqos 5.12.2008, 12:14:04
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
mike
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Możesz napisac filtr, który będzie filtrował liczby zgodnie z lokalizacją.
Go to the top of the page
+Quote Post
Theqos
post
Post #3





Grupa: Zarejestrowani
Postów: 49
Pomógł: 8
Dołączył: 5.12.2008

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


Interesujacy pomysl. Na probe napisalem sobie taki prosty filtr:
Kod
class numberFilter extends sfFilter
{
  public function execute($filterChain)
  {
    $request = $this->getContext()->getRequest();

    $params = $request->getParameterHolder()->getAll();

    foreach ($params as &$param)
    {
      $param = str_replace(',','.',$param);
    }
    
    $filterChain->execute();

    $pattern = '/value=\"(\d*)\\.(\d*)\"/i';
    $replacement = 'value="$1,$2"';

    $response = $this->getContext()->getResponse();
    $response->setContent(preg_replace($pattern, $replacement, $response->getContent()));
}
}


No i nie wiem czy to troche nie overkill filtrowac cale dlugie strony, jak input taga z liczbami mam tylko w paru miejscach. Daloby sie jakos ograniczcyc filtr do akcji albo modulu? Filtrowanie wszystkich parametrow to tez pewnie nietrafiony pomysl, szczegolnie ze mi zamienia ',' na '.' w miejscach gdzie tego nie potrzebuje smile.gif
Go to the top of the page
+Quote Post
mike
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Hmm, no trochę zabawy.
Jeszcze prościej można nadpisać settery i gettry dla klas modeli. Wtedy nie bedziesz musiał się w ogóle przejmować tym co wkładasz.
Setter sam sobie zapisze liczbę w dobrym formacie a getter ją zwróci.
Go to the top of the page
+Quote Post
Theqos
post
Post #5





Grupa: Zarejestrowani
Postów: 49
Pomógł: 8
Dołączył: 5.12.2008

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


No w sumie tak, ale to tez troche roboty i raczej to nie przejdzie przez walidator. Dalem sie zwiesc dokumentacji do symfony, ze "symfony natively automates all the aspects of internationalization" smile.gif a tu prostej konwersji liczb niema sad.gif
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: 20.08.2025 - 04:35