![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 9 Dołączył: 3.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
pojawił się u mnie problem z metodami formularza updateObject i isValid, czego za bardzo nie rozumiem, może powiem jak do tego doszło:
na początku stworzyłem moduł "test" jakiejś aplikacji i projektu zrobiłem niezbyt skomplikowaną schemę: Kod propel: test: id: text: varchar(20) z linii poleceń poszło: Kod symfony propel:build-all symfony propel:build-forms wrzuciłem do bazy jeden wiersz przez phpmyadmin w polu text miał "asdf" do tego tak wygląda actions.class.php w module:
a w szablonie jest najprostsze wyświetlenie formularza wzięte żywcem z manuala... Kod <form action="<?php echo url_for('test/index') ?>" method="post"> <table> <?php echo $form ?> <tr> <td colspan="2"> <input type="submit" /> </td> </tr> </table> </form> okazuję się że po otworzeniu strony /frontend_dev.php/test i przyciśnięciu przycisku Wyślij otrzymujemy błąd o nijakiej treści "[sfValidatorErrorSchema]" oprócz tego symfony nie wypluło nic wiecej prócz ścieżek nie bardzo wiem na czym polega błąd ciekawa rzecz również ujawnia się gdy zamiast całego if-a wstawimy var_dump($this->form->isValid()); okazuję się że na ekranie dostajemy false... mimo że wpis jest całkiem poprawny więc formularz stworzony na podstawie wpisu też powinien czy ktoś jest mi w stanie wytłumaczyć na czym polega problem? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 304 Pomógł: 51 Dołączył: 4.02.2005 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
A czym chcesz zupdejtować ten obiekt, jeśli nie podajesz odpowiednich danych do formularza? Pozatym chyba nie rozumiesz zabardzo tych formularzy, to powinno wyglądać mniej więcej tak:
Ten post edytował -=Peter=- 4.10.2008, 14:25:05 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 9 Dołączył: 3.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
no chyba rzeczywiście nie rozumiem
Cytat A czym chcesz zupdejtować ten obiekt, jeśli nie podajesz odpowiednich danych do formularza? Nie rozumiem co masz na myśli? wiem że można zbindować ale wydaje mi się że metoda updateObject po coś jest... i służy ona do odseparowania się od dbania o to skąd formularz ma brać dane którym ma zostać update'owany formularz z propel:build-forms sam generuję nazwy pól i jest świadomy odtwarzania zależności formularz <-> model stąd wydaje mi się iż nowe formularze będą bardziej naciskać na updateObject tylko nie bardzo rozumiem czemu to nie działa zauważyłem że kluczem jest właściwość isBound, gdyż metoda isValid klasy sfForm opiera się na niej bezpośrednio wpływając na to czy wyjątek o którym wspomniałem zostanie wypluty czy nie przez symfony
tylko zupełnie nie rozumiem znaczenia tej właściwości PS. ten post jest moimi przypuszczeniami (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Ten post edytował zimi 4.10.2008, 15:11:28 |
|
|
![]()
Post
#4
|
|
Admin Techniczny Grupa: Administratorzy Postów: 2 072 Pomógł: 93 Dołączył: 5.07.2005 Skąd: Olsztyn ![]() |
patrzac na kod tutaj http://www.symfony-project.org/blog/2008/0...-story-part-4-5 to bind i isValid jednak jest wymagane (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 9 Dołączył: 3.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
dzięki @kwiateusz widać źle zrozumiałem ideę updateObject, po tym linku chyba mi się trochę poprawiło
ale swoją drogą wydaję mi się że formularze mają możliwości na tyle aby mogły się same sobą zająć... Ten post edytował zimi 4.10.2008, 16:23:32 |
|
|
![]()
Post
#6
|
|
Admin Techniczny Grupa: Administratorzy Postów: 2 072 Pomógł: 93 Dołączył: 5.07.2005 Skąd: Olsztyn ![]() |
imo mogłyby pominac conajwyzej isValid, ale i w takiej formie nie wymagają tez az tak dużo zachodu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 9 Dołączył: 3.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
tzn. ja myślę raczej o tej linijce:
z linka który podałeś, a głównie o to że formularz wie że przesyła wszystko przez 'product' i w sumie wie skąd może go ściągnać po prostu wydaję mi się, że pisanie formularzowi "przypnij do siebie dane z tablicy 'product' i pliki z tablicy 'product'" jest dziwne skoro on sam to tam zapisał ale może to po prostu ja jestem dziwny (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) :P |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
Formularz nie wie skąd ma wziąć swoje wartości, bo i nigdzie tego nie deklarujesz. Pomyślałeś, że zapytanie może przyjść w inny sposób?
Metoda isValid nie jest wymagana, można jej nie używać. Nie wiem dlaczego korzystasz z metody updateObject. Powinieneś raczej używać save, ponieważ ta metoda zapisuje obiekt w bazie, a ta z której korzystasz uzupełnia tylko obiekt o podane wartości. Wyjątek, który dostaje autor wątku jest spowodowane tym, że próbujesz zrobić update wtedy kiedy dane są nie poprawne. To dlatego warto sprawdzić czy formularz się waliduje. Jeszcz co do tego: Cytat z linii poleceń poszło: Kod Kod symfony propel:build-all symfony propel:build-forms samo build-all już buduje formularze, no chyba, że wywoła się z opcją skip-forms Przepraszam, że trochę nie po kolei napisałem, ale to dlatego, że ciężko mi było od czegoś zacząć (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ale mam nadzieje, że pomogłem. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 9 Dołączył: 3.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Formularz nie wie skąd ma wziąć swoje wartości, bo i nigdzie tego nie deklarujesz. domyślnie mamy format modelu[pole] dostarczony domyślnie i wszystkie pola w formularzu będą mieć nazwy dostarczone przez ten format, format możesz zmienić na jakikolwiek inny jednak robisz to przez klasę formularza... a zatem jest on świadom zmian jakie sam ma dokonać zatem wie jakie są pola... wie skąd może pobrać to czego potrzebuje... w skrócie klasa która generuje formularz musi wiedzieć jakie dane dotrą z formularza, inaczej nie mogłaby najzwyczajniej w świecie stworzyć parametrów name pól formularza tak nakazuje mi sądzić moja logika Cytat Pomyślałeś, że zapytanie może przyjść w inny sposób? Nie, ale nie rozumiem też co masz na myśli Cytat Nie wiem dlaczego korzystasz z metody updateObject. Przez błędnie zrozumianą ideę działania updateObject myślałem że jest to forma bindowania przykryta pewną warstwą abstrakcji która właśnie sama wie skąd ma wziąć dane... To był mój błąd po prostu... Cytat Wyjątek, który dostaje autor wątku jest spowodowane tym, że próbujesz zrobić update wtedy kiedy dane są nie poprawne. napisałem to wcześniej...: Cytat zauważyłem że kluczem jest właściwość isBound, gdyż metoda isValid klasy sfForm opiera się na niej bezpośrednio wpływając na to czy wyjątek o którym wspomniałem zostanie wypluty czy nie przez symfony napisałem również wpis dodany przeze mnie do tabeli jest poprawny, więc formularz tworzony na podstawie wpisu też powinien być poprawny jednak właściwość isBound formularza przyjmuje wartość false co skutkuje tym że isValid zwraca informacje że formularz jest niepoprawny, same dane spełniają narzucone validatory nie rozumiem czym jest isBound i dlaczego przez to formularz jest niepoprawny |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
bind() => isBound
Formularz nie może być poprawny skoro nie ma żadnych danych. Piszesz dziwne, wszystko razem i ciężko Cię zrozumieć. Coś tam pisałeś, pewnie chodzi Ci o metodę:
No właśnie, ta informacja jest tylko dla widżetów, aby one same mogły ustalić wartość parametru name dla swojego pola. Ty chciałbyś, aby formularz sam sobie pobierał z requestu te dane. To jest nie możliwe, ponieważ założeniem tego sub-framework'a jest możliwość całkowitego oddzielenia od reszty. Żądanie może przyjść np. przez xml-rpc więc skąd formularz ma wiedzieć jak odebrać dane? Uważam, że nie ma sensu dalej nad tym dyskutować. Jeśli uważasz, że developerzy źle zrobili, dopisz sobie swoją klasę formularzam, która będzie sama sobie te dane pobierała. Ten post edytował destroyerr 4.10.2008, 18:52:12 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 9 Dołączył: 3.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
ok teraz rozjaśniłeś mi pogląd na sprawę...
nie mówię że źle zaprojektowali tylko że nie rozumiem tu wszystkiego... i jest to wbrew mojej intuicji rozumiem też na czym polegał błąd jednym słowem teraz mi pomogłeś..., dzięki |
|
|
![]() ![]() |
![]() |
Aktualny czas: 3.10.2025 - 14:36 |