Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony]modyfikacja danych przesłanych z formularza
Forum PHP.pl > Forum > PHP > Frameworki
AxZx
witam

można w pliku validate/profil.yml zrobić coś takiego, że wartość z jednego pola w formularzu będzie zmieniona przez jakąś moją funkcję? albo helper?

a chodzi o to, że jest formularz, w jednympolu user wpisuje jakąś wartość, a w drugim polu ta sama wartość jest potraktowana pewną funkcją do zmiany - pobieram tą wartość AJAXem. ale tak czy siak trzeba by tą wartość później jeszcze raz przefiltrować.
nie chce tego robić w akcji.
mam kilka formularzy, ale jedną akcję. dlatego chciałbym móc to robić w osobnym pliku, który będzie dotyczył tylko jednego formularza.

dzieki za zrozumienie i pomoc:)
mike
No na pierwszy rzut oka mógłbyś zrobić dwie rzeczy:
1. Dodatkową validację przeprowadzić w odpowiedniej metodzie validate*();
2. Napisać swój validator, który po odebraniu parametru z obiektu sfRequest i zwetyfikowaniu podmieni go później na inny (sfRequest()->setParameter())
AxZx
właśnie tak kombinuje, utworzyłem plik
studioValidator.class.php
i w nim kombinuje różne rzeczy ale nic nie wychodzi.
  1. <?php
  2. class studioValidator extends sfValidator
  3. {
  4.    public function execute(&$value, &$error)
  5.    {        
  6.        $this->setParameter('nazwa_slug', $this->getParameter('nazwa'));
  7.        return true;
  8.    }
  9. }
  10. ?>


w akcji zapisuje dane z formularza w ten sposób:
  1. <?php
  2. $dane->fromArray($this->getRequest()->getParameterHolder()->getAll(), BasePeer::TYPE_FIELDNAME);
  3. ?>
mike
Ale testowana wartość jest w zmiennej $value. I to ją możesz zmienić (jest ona przekazana przez referencję) podczas testowania.
Parametry to ustawienia z pliku .yml

Przepraszam pewnie Cię wprowadziłem w błąd poprzednim postem z tymi parametrami.
AxZx
nie wiem jak to zmienić:(

taki kod ?
  1. <?php
  2. public function execute(&$value, &$error)
  3.    {
  4.        $value = 'test';
  5.        return true;
  6.    }
  7. ?>


chciałbym, żeby ta wartość test była zapisana w bazie.

EDIT:
ale gafa:)
w modelu wystarczyło nadpisać metodę (albo raczej rozszerzyć) zapisującą daną kolumną.
szkoda, że nie można samemu sobie dać pomógłtongue.gif

EDIT2:
jednak to nie takie proste jak mi się wydawało.
problem w tym, że ta kolumna jest unikalna. w walidacji chcę sprawdzić czy już taki wpis jest w bazie.

załóżmy, że w bazie jest wpis "janek-2"
user wpisze "janek 2"
w klasie sfPropelUniqueValidator w bazie szukany jest wierszy który ma w kolumnie X wartość "janek 2" no i nie znajdzie czyli pozwoli zapisać. a ja zmodyfikowałem funkcje setX tak żeby zrobiła z "janek 2" "janek-2".
w efekcie będzie błąd z bazy, że jest duplikat.

przydałoby się, żeby można było w metodzie execute klasy walidacji modyfikować wartość, która pojawi się w formularzu.
tylko jak to zrobić?
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.