Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony]modyfikacja danych przesłanych z formularza
AxZx
post
Post #1





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


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


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
mike
post
Post #2





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

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


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())
Go to the top of the page
+Quote Post
AxZx
post
Post #3





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


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. ?>


--------------------
aplikacje internetowe | Symfony
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%)
-----


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.
Go to the top of the page
+Quote Post
AxZx
post
Post #5





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


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ć?


--------------------
aplikacje internetowe | Symfony
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: 22.08.2025 - 05:00