Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony]Admin Generator
Forum PHP.pl > Forum > PHP > Frameworki
dtrevo
Zainstalowałem Panel Admina, jak chce dodać, albo zedytowac jakieś dane wyskakuje taki błąd:



Fatal error: Class UzytkownikForm contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (sfFormPropel::getModelName) in /var/www/probaa/lib/form/UzytkownikForm.class.php on line 12



Oto plik UzytkownikForm.class.php:

  1. <?php
  2.  
  3. /**
  4.  * Uzytkownik form.
  5.  *
  6.  * @package    nowy
  7.  * @subpackage form
  8.  * @author     Your name here
  9.  * @version    SVN: $Id: sfPropelFormTemplate.php 10377 2008-07-21 07:10:32Z dwhittle $
  10.  */
  11.  
  12. class UzytkownikForm extends BaseFormPropel
  13. {
  14.  public function configure()
  15.  {
  16.      $this->setWidgets(array(
  17.           'login'=> new sfWidgetFormInput(),
  18.           'haslo'=> new sfWidgetFormInputPassword(),
  19.           'powtorz'=> new sfWidgetFormInputPassword(),
  20.           'mail'=> new sfWidgetFormInput(),
  21.           ));
  22.  
  23.  
  24.       $this->setValidators(array(
  25.        'login'    => new sfValidatorString(array('required' => true), array('required' => 'Musisz wypełnić te pole!')),
  26.        'haslo' => new sfValidatorString(array('required' => true , 'min_length' => 6), array('required' => 'Te Pole jest obowiązkowe', 'min_length' => 'Dla twojego bezpieczeństwa, hasło powinno miec przynajmniej 6 znaków.')),
  27.        'powtorz' => new sfValidatorString(array('required' => true , 'min_length' => 6), array('required' => 'Te Pole jest obowiązkowe')),
  28.        'mail'   => new sfValidatorEmail(array(), array('invalid' => 'The email address is invalid.', 'required' => 'To pole jest obowiązkowe.'))));
  29. $this->validatorSchema->setPostValidator(new sfValidatorAnd(
  30.           array(
  31.        new sfValidatorPropelUnique(array('model' => 'Uzytkownik', 'column' => 'login'), array('invalid' => 'Taki login juz istnieje')),
  32.        new sfValidatorSchemaCompare('powtorz', '==', 'haslo', array(), array('invalid' => 'Different passwords'))
  33.   )));
  34.  
  35.  
  36.   }
  37.  
  38. }
  39. ?>
destroyerr
Błąd nie dotyczy symfony tylko php. Klasa którą podałeś, jak wynika z błędu musi posiadać metodę getModelName.
Nie wiem do czego używasz tego formularza. Jeśli do rejestracji użytkownika, to nie wiem jak wczystujesz ten formularz. Polecam poczytać dokumentację, a w razie problemów jaśniej opisać problem.
dtrevo
No kombinuje, kombinuje i nic, ale gdy zmiene żeby klasa UzytkownikForm dziedziczyła z sfForm, to formularz sie wyświetla, podczas gdy dziewdziczy z BaseFormPropel to sie nie wyświetla i wyrzuca to co wyżej. tutaj podaje kontroler:

  1. <?php
  2.  
  3. /**
  4.  * rejestracja actions.
  5.  *
  6.  * @package    probaa
  7.  * @subpackage rejestracja
  8.  * @author     Your name here
  9.  * @version    SVN: $Id: actions.class.php 12479 2008-10-31 10:54:40Z fabien $
  10.  */
  11. class rejestracjaActions extends sfActions
  12. {
  13. /**
  14.   * Executes index action
  15.   *
  16.   * @param sfRequest $request A request object
  17.   */
  18.     public function executeIndex($request)
  19.  {
  20. $this->form = new UzytkownikForm();
  21.    $this->komunikat = ' ';
  22.  
  23.    if ($request->isMethod('post'))
  24.    {
  25.      $this->form->bind(array(
  26. 'login' => $request->getParameter('login'),
  27. 'haslo' => $request->getParameter('haslo'),
  28. 'powtorz' => $request->getParameter('powtorz'),
  29. 'mail' => $request->getParameter('mail')));
  30.      if ($this->form->isValid())
  31.      {
  32.        try{
  33.             $u = new Uzytkownik();
  34.             $u->setLogin($request->getParameter('login'));
  35.             $u->setHaslo($request->getParameter('haslo'));
  36.             $u->setMail($request->getParameter('mail'));
  37.             $u->save();
  38.             return $this->forward('rejestracja', 'dziekujemy');
  39.        }
  40.  
  41.       catch(Ecxeption $e){
  42.           return $this->forward('rejestracja', 'blad');
  43.       }
  44.  
  45.      }
  46.  
  47.    }
  48.  }
  49.  public function executeDziekujemy(){
  50.      $this->komunikat = 'dziekujemy za rejstracje, przebiegła pomyślnie.';
  51.      $this->setTemplate('index');
  52.  
  53.  }
  54.  public function executeBlad(){
  55.      $this->komunikat = 'Wystapił błąd w czasie przetwarzanie informacji.';
  56.      $this->setTemplate('index');
  57.  }
  58.  
  59. }
  60. ?>
destroyerr
Kod php dawaj w znaczniki php.
Widzę, że masz niewielkie pojęcie o tym co chcesz zrobić. W takim razie nie wiem czemu nie korzystasz z generowania panelu administracyjnego.
Chcesz na piechotę sam? To jako klasę formularza podaj klasę wygenerowaną przez symfony. Czytaj dokumentacje a z czasem będziesz wiedział więcej winksmiley.jpg
dtrevo
chyba sie nie rozumiemy, panel administracyjne wygenerowałem, tyle że aplikacja podczas edytowania wyrzucał jakieś błędy, poszperdałem troche i dowiedziałem się że klasa (u mnie 'UzytkownikForm.class.php') musi dziedziczyć po sfFormPropel, tyle że gdy dziedziczy po sfFormPropel, nie wyświetla nawet normalnego formularza w zwyklej aplikacji wyrzucając błąd jak w pierwszym poście.


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

Problem rozwiązałem, klasa miała dziedziczyć BaseUzytkownikForm.class.php, a nie BaseFormPropel.class.php. Nastepnym razem postaram sie lepiej wyjaśniać problemy, dziękuje, i pozdrawiam
destroyerr
Bo nie znasz php i dlatego nie rozumiesz błędu.
Co innego, że nie wiem gdzie przeczytałeś, że musi dziedziczyć po sfFormPropel. Jak już to po BaseUzytkownikForm, ale tak właśnie było zaraz po wygenerowaniu.
Jeśli możesz to opisz co zrobiłeś.
dtrevo
widze że mam doczynienia z kolegą o wysokim poziomie abstrakcji, w życiu bym sie nie domyslał że ktoś nie potrafi PHP, dziedzicząc nie ta klase co trzeba.
Pr0100
dtrevo, destroyerr ma racje Ty nie wiesz co robisz. Sf to bardzo sztywny FW i radze robić wszystko w sposób przedstawiony w dokumentacji.

1. Uzupełnij schema.yml tak aby jak najpełniej oddała logikę twojej bazy danych (wszędzie uwzględnij required oraz unique)
2. symfony propel:build-all
3. Formularz tworzysz edytując/dodając pliki w /lib/form
4. We żadnym wypadku nie zmieniasz plików w folderze /lib/form/base
5. Wszystkie klasy w /lib/form powinny dziedziczyć klasy z /lib/form/base
6. Zapominasz o getModelName oraz o sfFormPropel smile.gif

tak to wygląda w skrócie, więcej informacji znajdziesz w http://www.symfony-project.org/forms/1_2/en/

i jeszcze jedno zamiast tłumaczyć komunikaty do każdego pole oddzielnie proponuje zerknąć na Listing #2 na stronie http://www.symfony-project.org/forms/1_2/e...nd-Localisation
dtrevo
ech, może i ale nie wydaje mi sie że nie znam PHP, wydaje wam się bo ucze sie nie z jobeet'a ale z książki, Karola Przystalskiego.

1. Jest to próbna strona tylko do ćwiczeń, nie chciało mi sie uzupełniac tych pól.
2. ? Polecenie budujące model, i wrzucające scheme do bazy.
3. nie dodawałem klas formularzy, w innym folderze.
4. Nie zmieniałem tych plików.
5. Tak teraz już wiem.


mhm, dziekuje za rady i pozdrawiam
Pr0100
Cytat
1. Jest to próbna strona tylko do ćwiczeń, nie chciało mi sie uzupełniac tych pól.

chodziło mi o 'required' => 'Musisz wypełnić te pole!' przy każdym inpucie. Można zmienić to globalnie poprzez messages.pl.xml
Cytat
2. ? Polecenie budujące model, i wrzucające scheme do bazy.

jest to polecenie budujące model, formularze i filtry oraz "wrzucająca scheme do bazy"
Cytat
ale nie wydaje mi sie że nie znam PHP

ja miałem na myśli tylko to że za mocno naginasz zasady panujące w Sf.
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.