Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony] formularze w 1.1
zimi
post
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:
  1. <?php
  2. class testActions extends sfActions
  3. {
  4. /**
  5.   * Executes index action
  6.   *
  7.   * @param sfRequest $request A request object
  8.   */
  9.  public function executeIndex($request)
  10.  {
  11.    $a = TestPeer::retrieveByPK(1);
  12.    $this->form = new TestForm($a);
  13.    if($request->isMethod('post'))
  14.    {
  15.      $this->form->updateObject();
  16.    }
  17.  }
  18.  
  19. }
  20. ?>

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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
zimi
post
Post #2





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
Go to the top of the page
+Quote Post

Posty w temacie


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: 16.10.2025 - 02:47