Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] Lokalizacja liczb
Forum PHP.pl > Forum > PHP > Frameworki
Theqos
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.
mike
Możesz napisac filtr, który będzie filtrował liczby zgodnie z lokalizacją.
Theqos
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
mike
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.
Theqos
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
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.