Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony]Walidacja formularza
ceieneka
post
Post #1





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 6.08.2009

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


Witam
Uczę się Symfony robiąc portal który wcześniej zrobiłem bez frameworka, i mam problem przy walidacji formularza. Googluje caly dzien probuje coraz nowszych (glupszych) rozwiazan i ciagle nic. Chociaz pomoc dotyczaca walidacji formularzy jest obszerna to jednak tam jest mowa o formularzach stworzonych na podstawie modelu przez propela lub doctrine. Czy moglby mi ktos pomoc w walidacji prostego formularza kontaktowego sa w nim pola:

imię i nazwisko - poprzednio walidowalem tak
  1. if(!eregi("(^[a-ząćęłńóśźż]{3,} [a-ząćęłńóśźż]{2,}$)|(^[a-ząćęłńóśźż]{3,} [a-ząćęłńóśźż]{2,}-[a-ząćęłńóśźż]{2,}$)",$imie))
  2. {
  3. $errors[0]="Imię i nazwisko - pole składa się z dwóch członów oddzielonych spacją:<br/> -imię: dozwolone są wyłącznie litery, musi składać się co najmniej z trzech liter<br/> -nazwisko: dozwolone są wyłącznie litery,w przypadku nazwisk dwóczłonowych łącznikiem jest znak '-', człon musi składać się z conajmniej dwóch znaków.<br/><br/>";
  4. $prawidlowo=false;
  5. }


adres e-mail -
  1. if(!eregi("^[0-9a-ząćęłńóśźż_.-]+@[0-9a-ząćęłńóśźż\.]{2,}.[a-z]{2,3}$",$mail))
  2. {
  3. $errors[1]]="Adres email.<br/><br/>";
  4. $prawidlowo=false;
  5. }


wiadomość -
  1. if(strlen($wiadomosc)>1000)
  2. {
  3. $errors[2]="Wiadomość - maksymalnie może zawierać 1000 znaków.<br/><br/>";
  4. $prawidlowo=false;
  5. }


Niby prosty formularz (IMG:style_emoticons/default/sciana.gif)
Formularz wystepuje w module kontakt, w katalogu lib/form stworzylem plik KontaktForm.class.php (bo chyba powinienem co nie?(IMG:style_emoticons/default/questionmark.gif) ) ktory wyglada tak:
  1. class KontaktForm extends sfForm
  2. {
  3. public function configure()
  4. {
  5. $this->setWidgets(array('mail' => new sfWidgetFormInput(),'wiadomosc' => new sfWidgetFormTextarea(),'nazwa' => new sfWidgetFormInput(),'company' => new sfWidgetFormInput()));
  6. $this->setValidators(array('mail' => new sfValidatorEmail(),'wiadomosc' => new sfValidatorString(array('max_length' => 1500,'required' => true)),'nazwa'));
  7. }
  8. }

Ale nie wiem jak dodac warunki z ifow do validatora. Nie brechtajcie sie jesli to glupoty, bo w ogole nie jarze tych formularzy (IMG:style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
ceieneka
post
Post #2





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 6.08.2009

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


Ja nie twierdze ze dokumentacja jest kiepska tylko ze nie rozwiazuje wszystkich watpliwosci, tym bardziej mniej zaawansowanym uzytkownikom ktozy sie ucza.


Sciezki mam standardowe tzn. /nazwa_modulu/nazwa_akcji

routing.yml
  1. # default rules
  2. homepage:
  3. url: /
  4. param: { module: home, action: index }
  5.  
  6. default_index:
  7. url: /:module
  8. param: { action: index }
  9.  
  10. default:
  11. url: /:module/:action/*


url_for_form(sfForm $form, $routePrefix) zauwazylem ze ta funkcja wywoluje akcje create lub update, czyli moje uzycie ktore umiescilem poprzednio jest do chrzanu, no ale zanim w ogole zajme sie akcja create, to nie wyswietla mi sie formularz module kontakt, tzn wyswietla sie biala strona czy moglby mi ktos wskazac gdzie moze lezec przyczyna:
indexSuccess.php wyglada tak:
  1. <div id="content">
  2. <div class="container">
  3. <div id="oferta_tresc">
  4. <h2>Kontakt</h2>
  5. <p>
  6. Prosimy skorzystać z formularza kontaktowego
  7. </p>
  8. <br />
  9. <?php echo form_tag_for($form, '@kontakt')?>
  10. <table>
  11. <tfoot>
  12. <tr>
  13. <td colspan="2">
  14. <input type="submit" value="Wyślij"/>
  15. </td>
  16. </tr>
  17. </tfoot>
  18. <tbody>
  19. <?php echo $form ?>
  20. </tbody>
  21. </table>
  22. </form>
  23. </div>
  24.  
  25. <div class="czysc"></div>
  26. </div>
  27. </div>


kontaktForm.class.php tak:
  1. <?php
  2. class KontaktForm extends sfForm
  3. {
  4. public function configure()
  5. {
  6. $this->setWidgets(array('mail' => new sfWidgetFormInput(),'wiadomosc' => new sfWidgetFormTextarea(),'nazwa' => new sfWidgetFormInput(),'company' => new sfWidgetFormInput()));
  7. $this->setValidators(array('mail' => new sfValidatorEmail(),'wiadomosc' => new sfValidatorString(array('max_length' => 1500,'required' => true)),'nazwa' =>'imie_nazwisko' =>new sfValidatorRegex("(^[a-ząćęłńóśźż]{3,} [a-ząćęłńóśźż]{2,}$)|(^[a-ząćęłńóśźż]{3,} [a-ząćęłńóśźż]{2,}-[a-ząćęłńóśźż]{2,}$)")));
  8. }
  9. }


wrzuce jeszcze action.class.php
  1. ...
  2. public function executeIndex(sfWebRequest $request)
  3. {
  4. $this->wpisy_list = WpisyPeer::doSelectNew(new Criteria(), 3);
  5. $this->form = new KontaktForm();
  6. }
  7. ...

No i dlaczego nie chce sie wyswietlic??
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 13.10.2025 - 22:02