Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] sfGuard - dostosowanie szablonu logowania
Forum PHP.pl > Forum > PHP > Frameworki
Foxx
Witam, mam mały problem z pluginem sfGuard.
Nie mogę sobie poradzić ze zmianą w szablonie z formularzem logowania.
Chciałbym, żeby zamiast domyślnych opisów pól (Username:, Password:) były moje własne (E-mail:, Hasło:).

Wygląda mi na to, że te opisy są generowane automatycznie z nazw pól i nie znam na tyle architektury sfGuard żeby to obejść. Bedę wdzięczny za pomoc.

---------------------

Ok, udało mi rozwiązać problem opisów pól ale nie potrafię sobie poradzić z wyświetlaniem komunikatów.
SfGuard domyślnie wyświetla swoje komunikaty nad polem formularza, którego błąd dotyczy. Chciałbym w ogóle
usunąć stamtąd komunikaty i wyświetlić je w innym miejscu tak jak w pozostałych częściach strony.
A w pozostałych częściach strony robię tak:
  1. <?php
  2. if ($sf_request->hasErrors()){
  3.  include_partial('dodaj_ogloszenie/form_errors');
  4. }
  5. ?>

No i nie mogę znaleźć w plikach sfGuard zrozumiałego dla mnie templatu, w którym byłoby coś analogicznego, więc rozumiem, że odbywa się to jakoś inaczej.
A więc:
1. Jak przestać wyświetlać komunikaty sfGuarda nad polami formularza
2. Jak dostać się do tych komunikatów w innej części strony

Z góry dzięki za podpowiedzi.
nieraczek
Chodzi Ci o komunikaty bledow walidacji w stylu 'Login i haslo sa niepoprawne' ? Jesli tak to w sf_sandbox\lib\form\doctrine (jak uzywasz propel to w sf_sandbox\lib\form) tworzysz plik sfGuardFormSignin.class.php o np. takiej zawartosci:
  1. <?php
  2. class sfGuardFormSignin extends BasesfGuardFormSignin
  3. {
  4.  
  5.  public function configure()
  6.  {    
  7.    
  8.    parent::configure(); //wywolujemy z nadklasy metode configure() i ja zmieniamy
  9.    
  10.    $this->widgetSchema->setLabels(array(
  11.      'username'    => 'Twój login',
  12.      'password'   => 'Twoje hasło',
  13.    'remember'   => 'Zapamiętać',
  14.    ));    
  15.    
  16.    $this->setValidators(array(
  17.      'username'   => new sfValidatorString(array(), array('required' => 'Nie wpisano loginu.')),
  18.      'password' => new sfValidatorString(array(), array('required' => 'Nie wpisano hasła.')),
  19.      'remember' => new sfValidatorBoolean(),
  20.    ));
  21.    
  22.  
  23.    $this->validatorSchema->setPostValidator(new sfGuardValidatorUser(array(), array('invalid' => 'Login lub hasło są niepoprawne')));
  24.          
  25.  }
  26.  
  27.  
  28. }
  29. ?>
Foxx
Tak, o to mi chodziło w pierwszej wersji posta, ale doszedłem do tego rozwiązania i pojawił się drugi problem, który dopisałem w moim poście: komunikaty są domyślnie wyświetlane nad polami input logowania. Czyli jeżeli mam pole login i hasło i nie wpiszę nic to bezpośrednio nad polem login pojawia się komunikat "nie wpisano loginu" a nad polem hasło "nie wpisano hasła".

Ja natomiast chciałbym, żeby te komunikaty się nie wyświetlały tam ponieważ to sprawia że szablon mi się rozjeżdża, chciałbym po pierwsze wyłączyć to wyświetlanie i wyświetlić je w innym miejscu szablonu, na mój sposób, z moimi stylami.

Wiem oczywiście o stworzeniu własnego szablonu signinSuccess, który napisze domyślny szablon sfGuarda, ale sam formularz, jego pola, są w tym szablonie wyświetlane po prostu za pomocą <?php echo $form ?> i nie mogę nigdzie znaleźć zawartości HTML tego $form.

Czyli: jak wyłączyć domyślne wyświetlanie błędów i jak dobrać się do nich w szablonie signinSuccess analogicznie jak to robię z własnymi formularzami, czyli:
  1. <?php
  2. if ($sf_request->hasErrors()){
  3. include_partial('dodaj_ogloszenie/form_errors');
  4. }
  5. ?>
Kamil Adryjanek
Wszystko możesz dowolnie modyfikować w szablonach. Jeśli chcesz mieć dostęp do każdego błędu z osobna, będziesz musiał zrezygnować ze standardowego wyświetlania przez echo $form. Wtedy możesz sobie to poukładać na przykład tak:

Kod
     <?php if ($form->hasErrors()): ?>
  
         <?php echo $form->renderGlobalErrors() ?>
  
         <?php foreach($form as $field): ?>
  
             <?php echo $field->renderError(); ?>
  
         <?php endforeach; ?>
  
     <?php endif; ?>


Później ustawiasz labele i inputy poprzez $form['pole']->renderLabel() i $form['pole']->render() w odpowiednim formatowaniu.

Możesz też spróbować ustawić wszystkie waliadtory jak globalne, ale to może się nie udać - w każdym bądź razie nie miałem okazji przetestować tego rozwiązania.
Foxx
Dzięki, dodam jeszcze że rozwiązanie tych wszystkich problemów znajduje się tu: http://www.symfony-project.org/forms/1_1/en/ i właśnie zabieram się do lektury. Pozdrawiam.
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.