Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: quickForm i MVC
Forum PHP.pl > Forum > PHP > Pro > Archiwum Pro
squid
mam problem gdzie i jak umiejscowic pewien pakiet PEAR mianowicie QuickForm w MVC (choc problem tyczy rowniez innych pakietow). Czy QuickForm powinien byc w modelu, modelem czy tez widokiem, generalnie w moim widoku model ma generowac dane i przekazdywac je do widoku w postaci tablicy, czasem zachodzi potrzeba stworzenia formularza do czego chcem uzyc quicForm i teraz pytanie jak to polaczyc, oczywiscie uzywam smarty i wiem jak polaczyc ten pakiet PEAR ze smarty.
macie jakis pomysl?
Vengeance
Sądze że jak najbardziej Widok.
squid
No dobra mam w widoku ale cos mi tu nie gra.
Wiadomo QuicForm umozliwia sprawdzanie poprawnosci danych i mam w widoku dynamicznie includowany kod formularza i w nim takie cos:
  1. <?php
  2. if ( $form->validate())
  3. {
  4. $tmp = array(
  5.  ...
  6. );
  7. $insertResult = jakis_model::addCostam ( $tmp );
  8. if ( $insertResult )
  9. {
  10. ...
  11. }
  12. else
  13. {
  14.  ...
  15. }
  16. }
  17.  
  18. ?>


chociaz w MVC przeplyw informacji z widoku do modelu jest mozliwy (poprawcie mnie jesli sie myle) to zeby odwolac sie spowrotem z formularza/widoku do modelu musze uzyc metody statycznej tak jak w przykladzie bo inaczej strace atut validacji przez QuicForm. Gdybym np uzyl czegos takiego:
  1. <?php
  2. if ( $form->validate())
  3. {
  4.  header ('Location: jakas tam akcja co mzoe to handle');
  5. }
  6.  
  7. ?>

to dane przejda ale nie ma gwarancji ze sa poprawne przeciez mozna spreparowac formularz i i tak musze gdzies po drodze jeszcze raz zprawdzac poprawnosc danych.

Macie pomysl jak to elegancko zrobic?
sf
U mnie wygląda to tak:

- wyswietlamy formularz
- wysylamy i odbywa sie akcja walidacji
* blad - akcja zwrotna ( powrot do formularza )
* ok - akcja kolejna w lancuchu

header("location... takie rozwiazanie przypomina mi goto winksmiley.jpg

obecnie u mnie jest troche malo eleganckie rozwiazanie, bo komunikacja miedzy poszczegolnymi kalsami akcji jest zrobiona na zasadzie komunikatow zapisywach w sesji actionMessage i fallbackReason ( wywolywane poprzez funkcje zdefiniowane w klasie rodzic, po ktorej dziedzicza poszczegole akcje )

jak bede mial troche czasu to sprobuje zastosowac wzorzec fabryczny i zaimplementowac w nim mozliwosc komunikacji pomiedzy kolejno wywolywanymi akcjami w lancuchu akcji

chyba, ze ktos ma inny pomysl to z przyjemnoscia poslucham
Vengeance
U mnie po prostu EditNewsAction która ma za zadanie pobrać dane o Newsie, wyświetlić formularz a jeśli Request_method==POST to dokonuje walidacji i zapisania danych. Potem następuje Redirect lub jakiś komunikat.
squid
Cytat(Vengeance @ 2005-07-21 20:22:59)
U mnie po prostu EditNewsAction która ma za zadanie pobrać dane o Newsie, wyświetlić formularz a jeśli Request_method==POST to dokonuje walidacji i zapisania danych. Potem następuje Redirect lub jakiś komunikat.

a uzywasz do tego QuickForm questionmark.gif a co jesli masz oba requesty na raz (GET i POST)
bo np u mnie GET informuje jaka akcja ma obsluzyc POST (czyli u mnie tylko wyswietlic formularz bo dodanie to juz metoda statyczna )
Vengeance
"bo np u mnie GET informuje jaka akcja ma obsluzyc POST"
Wywołanie, a ty przesłania zmiennych to nie to samo :]

Zrób sobie np.
<form action="script.php?get=1" method="post">
<input type="text" name="post"/>
</form>
I Request_method == POST ale możesz pobrać zmienne $_GET także :]

Ale nie robie tego przez QuickForm, nie lubie PEAR
squid
dla mnie nie wazne lubie czy nie lubi, QuickForm to jest kawal dobrej pracy i gdybym chcial napisac cos takeigo i to sam to kilka miesiecy z glowy a wiem ze mozna to do MVC zaadoptowac bo widzialem frameworki oparte na MVC i PEAR
Vengeance
Wiec przenieś całe te $form->validate na akcje. Tam dokonujesz walidacji i ustawiania parametrów formularza, zaś do TPL przekazujesz gotowy, sparsowany kod formularza z podstawionymi danymi itd.

akcja:
// pobranie danych z modelu
// jesli request_method == POST to sprawdzamy bledy
// $form->validate();
// gdy nie ma bledow to dodajemy element poprzez model i wyswietlamy komunikat
// gdy bledy sa dodajemy odpowiedni txt do TPL
// utworzenie regul dla formularza, wstawienie danych w pola
// przekazanie kodu formularza do TPL
// wyswietlenei TPL
squid
no teraz mowisz konstruktywnie ale poniewaz juz tyle czasu probuje przystosowac QuicForma do swoich potrzeb powaznie rozwazam napisanie czegos wlasnego
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-2024 Invision Power Services, Inc.