Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] Validacja
Forum PHP.pl > Forum > PHP > Frameworki
Lonas
Hej - chce zwalidowac pole w formularzu - w katalogu validate dodalem plik yml o takiej samie jak akcja

Kiedy daje zatwierdzenie formularza otrzymuje komunikat

Too many forwards have been detected for this request (> 5).

  1. <?php
  2.     if ($this->getActionStack()->getSize() >= $this->maxForwards)
  3.     {
  4.       // let's kill this party before it turns into cpu cycle hell
  5.       throw new sfForwardException(sprintf('Too many forwards have been detected for this request (> %d).', $this->maxForwards));
  6.     }
  7. ?>


plik edit.yml wyglada tak
  1. methods:
  2. post: [name]
  3.  
  4. names:
  5. name:
  6. required: Yes
  7. required_msg: The name field cannot be left blank
- wciecia zachowalem tutaj sie rozjezdza

w action klas dodalem tez

  1. <?php
  2. public function handleErrorEdit()
  3.  {
  4.    $this->forward('gallery', 'edit');
  5.  }
  6. ?>


w czym problem ?
mike
Żądanie akcji gallery/edit
Walidacja
Błąd, przekierowanie na akcję gallery/edit
Akcja gallery/edit
Walidacja
Błąd, przekierowanie na akcję gallery/edit
Akcja gallery/edit
Walidacja
Bład, ...
...

W handleError() wywal przekierowanie.
Lonas
Dzieki,

Tylko wtedy szuka szablonu editError.php

A ja bym chcial zeby wrocil do szablonu edit i chce wyswietlic komunikat

bledy wyrzucam kodem - z manuala :

  1. <?php if ($sf_request->hasErrors()): ?>  
  2.  <div id="errors" style="padding:10px;">
  3.    Please correct the following errors and resubmit:
  4.    <ul>
  5.    <?php foreach($sf_request->getErrors() as $error): ?>
  6.      <li><?php echo $error ?></li>
  7.    <?php endforeach ?>
  8.    </ul>
  9.  </div>
  10. <?php endif ?>
mike
Cytat(Lonas @ 30.10.2008, 12:10:04 ) *
Tylko wtedy szuka szablonu editError.php
  1. <?php
  2.  
  3. public function handleErrorEdit() {
  4.    return sfView::INPUT;
  5.    // bądź dowolny inny widok
  6. }
  7.  
  8. ?>
Lonas
Nie rozumiem tego,

Na stronie http://trac.symfony-project.org/wiki/MyFir...nyProjectPolish
pisze ze trzeba mam miec plik yml - pozniej dodac akcje ze jak jest blad do wraca do edit i w edit jest komunikat o bledzie, dlaczego to tak nie dziala
mike
Cytat(Lonas @ 30.10.2008, 12:15:52 ) *
Na stronie http://trac.symfony-project.org/wiki/MyFir...nyProjectPolish
pisze ze trzeba mam miec plik yml - pozniej dodac akcje ze jak jest blad do wraca do edit i w edit jest komunikat o bledzie, dlaczego to tak nie dziala
No to jest źle napisane. To bardzo stary dokument. Olej go.

Wykonanie akcji jest poprzedzone walidacją, na którą składa się walidacja automatyczna (reguły w pliku .yml) i walidacja ręczna (wykonanie funkcji validate*() o ile ona istnieje). Jeśli walidacja przeszła to wykonywana jest akcja. Jeśli nie to wykonywana jest obsługa błędu, czyli funkcja handleError*()

Jesli chcesz żeby wyświetlił się ponownie widok EDIT to musisz sam o tym zadecydować bo domyślnym działaniem jest wyświetlenie widoku ERROR.
Lonas
Rozumiem, ale kiedy zamiast pliku yml do klasy GalleryForm w funkcji configure dodam

  1. <?php
  2. $this->validatorSchema['name'] = new sfValidatorString(
  3.      array('required' => true),
  4.      array('required' => 'Podaj nazwe galerii'));
  5.    
  6.    $this->validatorSchema['visible'] = new sfValidatorString(
  7.      array('required' => true),
  8.      array('required' => 'Podaj numer'));
  9. ?>


to walidacja dziala tylko ze tutaj znowu komunikaty wyswietla obok pola i nie iwem gdzie moge ustawic te komunikaty tak jak ja bym chcial w szablonie


Pozostajac jednak przy pliku yml - jak moge wyswietlic widok EDIT ? bo tak nie dziala

  1. <?php
  2. public function handleErrorEdit() {
  3.     return sfView::EDIT;
  4.     // bądź dowolny inny widok
  5.  }
  6. ?>
AxZx
mozesz zrobic
return 'edit'
wtedy plik to bedzie editedit

albo mozesz dac return sfview::success;
albo $this->settemplate('edit');
Lonas
Jak zrobie tak

return $this->settemplate('edit');

to pisze że nie ma widoku editError

jak zrobie tak
return sfview::success;
to otrzymuje blad Fatal error: Undefined class constant 'success' in C:\Program F
mike
Skoro nie ma zmiennej success to sprawdź jakie są stałe w tej klasie. Tak ciężko to zrobić?
Zobaczysz wtedy, że jest stała SUCCESS
Lonas
No dobra smile.gif przekierowywuje na widok edit - ale juz nie ma formularza i dostaje komunikat

Notice: Undefined variable: form in C:\Program Files\WebServ\httpd\gallery\apps\frontend\modules\gallery\templates\editSuccess.php on line 1

Fatal error: Call to a member function getObject() on a non-object in C:\Program Files\WebServ\httpd\gallery\apps\frontend\modules\gallery\templates\editSuccess.php on line 1


Tak chyba ta walidacja nie ma byc zrobiona - a czy tutaj jest aktualny artykul ?
http://www.symfony-project.org/tutorial/1_1/my-first-project
mike
Do tego posta sądziłem że piszesz w symfony 1.0 a to jest link do symfony 1.1
Lonas
Nie wspomnialem ze pisze w symfony 1.1 smile.gif
mike
A masz w ogóle włączoną kompatybilność wsteczną z 1.0
Bo to podejście do walidacji, które jest w tym wątku to jest old way :-)
Lonas
Nie wlaczylem tego, jak wlacze to powinno dzialac ? czy lepiej robic juz new way smile.gif

bo troche opisane jeszcze jest tutaj znalazlem
http://www.symfony-project.org/book/1_1/10...rm%20Validation
phpion
Moim zdaniem olej stary sposób walidacji i zajmij się tylko nowym. Tutaj masz link do materiałów opisujących nowy sposób walidacji:
http://www.symfony-project.org/book/forms/...Form-Validation
Jest on dostępny w Symfony 1.1 oraz w późniejszych wersjach (przynajmniej w 1.2). Po co więc brnąć w coś, co już nie jest kontynuowane?
mike
Cytat(phpion @ 30.10.2008, 15:57:57 ) *
Moim zdaniem olej stary sposób walidacji i zajmij się tylko nowym. Tutaj masz link do materiałów opisujących nowy sposób walidacji:
http://www.symfony-project.org/book/forms/...Form-Validation
Jest on dostępny w Symfony 1.1 oraz w późniejszych wersjach (przynajmniej w 1.2). Po co więc brnąć w coś, co już nie jest kontynuowane?
Nowy sposób walidacji jest do bani. Ładnie wygląda i działa jak masz formularz. Jak masz żądanie GET to już jest lipa.
Lonas
Uf no w koncu dziala, takie pytanie - komunikat wyswietlam tak

  1. <?php echo $form['name']->renderError() ?>


gdzie moge ustawic wyglad tego komunikatu ?

edit : ok znlazlem style.css smile.gif

A czy jest mozliwosc ustawienia że jezeli jest komunikat o bledzie - aby podobnie jak w jquery klasa inputa sie zmienila zeby byla np czerwona ramka ?
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.