Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony]sfWidgetFormInputFile()
Gribo
post
Post #1





Grupa: Zarejestrowani
Postów: 237
Pomógł: 17
Dołączył: 1.11.2007
Skąd: Zielona Góra

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


Witam mam formularz który działa dobrze ale jest jeden szczegół, który mnie irytuje.
Otóż gdy podczas wypełniana formularza zrobię jakiś błąd (zaznaczam że jedno z pól to sfWidgetFormInputFile()) to Formularz dobrze się zwaliduje jednak wczytana wcześniej ścieżka do pliku który wczytałem do pola sfWidgetFormInputFile(), nie powróciła mimo że błąd był w innym polu. Przez to muszę wyszukiwać pliku graficznego od nowa na dysku i go wczytywać. Czy to jest jakiś bug? czy coś źle robię oto kody:

  1. <?php
  2. class rejestracjaActions extends sfActions
  3. {
  4. /**
  5.   * Executes index action
  6.   *
  7.   * @param sfRequest $request A request object
  8.   */
  9.  public function executeIndex(sfWebRequest $request)
  10.  {
  11.      $this->form=new RejestracjaForm();
  12.      if ($request->isMethod('post')) {
  13.           $this->form->bind($request->getParameter('uzytkownicy'), $request->getFiles('uzytkownicy'));
  14.  
  15.           if ($this->form->isValid()) {
  16.               try {
  17.                  $file = $this->form->getValue('awatar');
  18.                  $filename = 'uploaded_'.sha1($file->getOriginalName());
  19.                  $extension = $file->getExtension($file->getOriginalExtension());
  20.                  $file->save(sfConfig::get('sf_upload_dir').'/'.$filename.$extension);
  21.                  $this->form->save();
  22.                  $this->redirect('rejestracja/dziekujemy');
  23.           } catch (PropelException $e) {
  24.               $this->redirect('rejestracja/blad');
  25.           }}
  26.          
  27.          }
  28.  }
  29. ?>


  1. <?php
  2. class RejestracjaForm extends BaseUzytkownicyForm {
  3.    public function configure() {
  4.      
  5.        unset($this['usuniety'],$this['miasto'],$this['osobie'],
  6.                $this['usid'],$this['created_at'],$this['updated_at']
  7.        );
  8.    
  9.      
  10.       $this->setWidget('powtorz',new sfWidgetFormInputPassword());
  11.       $this->setValidator('powtorz',new sfValidatorString(array('max_length' => 45, 'required' => true)));
  12.       $this->widgetSchema->moveField('powtorz',sfWidgetFormSchema::AFTER,'haslo');
  13.      
  14.      
  15.       $this->widgetSchema->setFormFormatterName('list');
  16.      
  17.  $this->validatorSchema->setPostValidator(new sfValidatorAnd(array(
  18.      new sfValidatorSchemaCompare('haslo', '==', 'powtorz',
  19.            array(),
  20.            array('invalid' => 'Hasło "%left_field%" Nie zgadza się z "%right_field%"')
  21.          ),
  22.      new sfValidatorPropelUnique(array('model' => 'Uzytkownicy', 'column' => array('login')),array('invalid' => 'Login %value% już istnieje')
  23.          ))
  24.        ));
  25.  
  26.  
  27.       }
  28. }
  29. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
melkorm
post
Post #2





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


Jako że nie znam Symfony, ale widzę że nikt się nie wypowiada to powiem to co wiem:
- polu File nie można nadać value
- sposobem jest przesłanie tego w polu hidden i jeżeli później puste File to bierze się to z hidden, jest wiele sposobów zakładam że Symfony tak samo jak Zend nie ma tego oprogramowanego może i dobrze ale to już subiektywna opinia.

Poszukaj, może gdzieś na forum dot. Symfony jest to opisane i napisane (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

P.S. prosze nie bić za wypowiadanie się o czymś o czym nie ma się pojęcia.

Ten post edytował melkorm 7.07.2009, 19:14:23
Go to the top of the page
+Quote Post
Gribo
post
Post #3





Grupa: Zarejestrowani
Postów: 237
Pomógł: 17
Dołączył: 1.11.2007
Skąd: Zielona Góra

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


szukałem czegoś podobnego na necie ale nic na razie nie znalazłem. z tymi polami ukrytymi to może być problem jeśli chcę zrobić upload np. 5 zdjęć albo więcej. To co mam wstawiać tyle ukrytych może zna ktoś jakiś sposób ?
Go to the top of the page
+Quote Post
Pr0100
post
Post #4





Grupa: Zarejestrowani
Postów: 114
Pomógł: 24
Dołączył: 18.01.2008
Skąd: Warszawa

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


  1. <?php
  2. $this->setValidator('img', new sfValidatorFile(array('path' => 'images/users/', 'required' => ($this->isNew()) ? true : false)));
  3. ?>


autorski pomysł, działa na sf 1.2 doctine, na propelu nie testowałem

Ten post edytował Pr0100 8.07.2009, 12:01:30
Go to the top of the page
+Quote Post
Gribo
post
Post #5





Grupa: Zarejestrowani
Postów: 237
Pomógł: 17
Dołączył: 1.11.2007
Skąd: Zielona Góra

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


Sprawdziłem nie działa (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
Pr0100
post
Post #6





Grupa: Zarejestrowani
Postów: 114
Pomógł: 24
Dołączył: 18.01.2008
Skąd: Warszawa

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


możesz rozwinąć swoją wypowiedz? Przechodzi przez Validator jeżeli zostawisz pole puste? Jest update pola na null? Zmieniłeś action.php tak aby nie robiło redirect'a na error jeżeli nie ma awatar'u?
Go to the top of the page
+Quote Post
krowal
post
Post #7





Grupa: Zarejestrowani
Postów: 561
Pomógł: 72
Dołączył: 15.11.2006

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


Nie jestem pewien, ale miałem kiedyś podobny problem, pomogło coś takiego że zrobiłem assign zmiennej forma do widoku na końcu akcji. Spróbuj czegoś takiego:
  1. <?php
  2. class rejestracjaActions extends sfActions
  3. {
  4. /**
  5.  * Executes index action
  6.  *
  7.  * @param sfRequest $request A request object
  8.  */
  9. public function executeIndex(sfWebRequest $request)
  10. {
  11.     $form=new RejestracjaForm();
  12.     if ($request->isMethod('post')) {
  13.          $form->bind($request->getParameter('uzytkownicy'), $request->getFiles('uzytkownicy'));
  14.  
  15.          if ($form->isValid()) {
  16.              try {
  17.                 $file = $form->getValue('awatar');
  18.                 $filename = 'uploaded_'.sha1($file->getOriginalName());
  19.                 $extension = $file->getExtension($file->getOriginalExtension());
  20.                 $file->save(sfConfig::get('sf_upload_dir').'/'.$filename.$extension);
  21.                 $form->save();
  22.                 $this->redirect('rejestracja/dziekujemy');
  23.          } catch (PropelException $e) {
  24.              $this->redirect('rejestracja/blad');
  25.          }}
  26.        
  27.         }
  28.     $this->form = $form;
  29. }
  30. ?>
Go to the top of the page
+Quote Post
Gribo
post
Post #8





Grupa: Zarejestrowani
Postów: 237
Pomógł: 17
Dołączył: 1.11.2007
Skąd: Zielona Góra

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


Pr0100 ogólnie to tu nie chodzi o required tylko o to że jak jakies błedne pole w folmulazu załużmy na to że koleś źle wpisał maila to ta wartość, która była poprawna w sfWidgetFormInputFile() nie wraca tylko trzeba od nowa wybierać plik


krowal Spróbuję to zmienić jak wrócę do domu z pracy i dam znać

Ten post edytował Gribo 8.07.2009, 16:07:45
Go to the top of the page
+Quote Post
krowal
post
Post #9





Grupa: Zarejestrowani
Postów: 561
Pomógł: 72
Dołączył: 15.11.2006

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


Aa <input type=file> nie da się nadać wartości (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Jest tak zrobione ze względu na bezpieczeństwo. Wyobraź sobie sytuację gdzie w formularzu znajduje się pole typu file którego nie widać a ty nadasz mu automatycznie wartość np. ścieżkę do jakiegokolwiek pliku na dysku użytkownika oglądającego stronę. Jeśli użytkownik kliknie submit to plik automatycznie zostanie przesłany, może to być np lista użytkowników gg która znajduje się prawie zawsze w tym samym miejscu itp.

edit: Trochę nie chciało mi się czytać i poprzednio dałem taką odpowiedź, ale nic Ci to nie pomoże (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował krowal 9.07.2009, 08:42:48
Go to the top of the page
+Quote Post
Pr0100
post
Post #10





Grupa: Zarejestrowani
Postów: 114
Pomógł: 24
Dołączył: 18.01.2008
Skąd: Warszawa

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


Cytat
sfWidgetFormInputFile() nie wraca tylko trzeba od nowa wybierać plik


tak, ale widzisz jeżeli sfWidgetFormInputFile() jest puste to Symfony nie robi ->setImg(NULL) tylko zostawia poprzednią wartość. Tak więc jeżeli pozbędziesz się required podczas edycji formularza oraz przed wrzucaniem pliku na serwer sprawdzisz czy pole zostało uzupełnione to otrzymasz rozwiązanie swojego problemu.

Ten post edytował Pr0100 9.07.2009, 13:53:04
Go to the top of the page
+Quote Post

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: 4.10.2025 - 12:10