Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] upload w adminie za pomocą sfWidgetFormInputFileEditable
Forum PHP.pl > Forum > PHP > Frameworki
Foxx
Witajcie, mam problem z uploadem plików za pomocą widgetu sfWidgetFormInputFileEditable w wygenerowanym Adminie.
Gdy stosuję sfWidgetFormInputFile to problem jest ten sam, a mianowicie:

Plik ładuje się we wskazane miejsce.
Nie ma wpisu w bazie.

Dam głowę, że to co zrobiłem w pliku lib/form/FilmForm.class.php, w metodzie configure() jest prawidłowe oraz dam głowę, że druga metoda, którą dodałem w tej klasie jest albo błędna albo powinna być w innym miejscu.
Ale pół nocy przekopywałem net i nie trafiłem na czytelny przykład. Niestety nie jestem jeszcze na tyle biegły w 1.2 żeby bez problemów dostosowywać wszystko do Generatora... Proszę was o wskazówkę, gdzie powinienem wrzucić obsługę ładowanego pliku, jaka to powinna być metoda i czy wnętrze mojej będzie działać?

lib/form/FilmForm.class.php:

  1. <?php
  2. public function configure()
  3. {
  4.        
  5.  $this->widgetSchema['plakat'] = new sfWidgetFormInputFileEditable(array(
  6.    'label'     => 'Plakat',
  7.    'file_src'  => '/uploads/plakaty/'.$this->getObject()->getPlakat(),
  8.    'delete_label' => 'Usuń ten plik',
  9.    'is_image'  => true,
  10.    'edit_mode' => !$this->isNew(),
  11.  ));
  12.      
  13.  //$this->widgetSchema['plakat'] = new sfWidgetFormInputFile();
  14.  $this->validatorSchema['plakat'] = new sfValidatorFile();
  15.        
  16. }
  17.  
  18. public function updateObject($values = null)
  19. {
  20.  $object = parent::updateObject();
  21.  
  22.  $file = $this->getValue('plakat');
  23.  $filename = 'uploaded_'.sha1($file->getOriginalName());
  24.  $extension = $file->getExtension($file->getOriginalExtension());
  25.  $file->save(sfConfig::get('sf_upload_dir').'/plakaty/'.$filename.$extension);
  26.  
  27. }
  28. ?>


---------------- UPDATE ---------------------

Poczyniłem pewne postępy, zmodyfikowałem updateObject() i teraz plik ładuje się na serwer a do bazy jest wstawiana jego nazwa. Niestety z całą bezwzględną ścieżką do pliku. Więc moje pytania są teraz następujące:

1. Czy miejsce, w którym umieściłem updateObject() jest właściwe (lib/form/FilmForm.class.php)

2. Czy to powinna być metoda updateObject()? Czemu nie save() jak np. tu: http://www.symfony-project.org/forms/1_2/e...the_save_method

3. W jaki sposób zapisać do bazy tylko nazwę pliku, bez ścieżki bezwzględnej z komputera, z którego pochodzi plik?

Obecnie kod metody updateObject() wygląda tak:
  1. <?php
  2. public function updateObject($values = null)
  3. {
  4.  if (file_exists($this->getObject()->getPlakat()))
  5.  {
  6.    unlink($this->getObject()->getPlakat());
  7.  }
  8.    
  9.  $file = $this->getValue('plakat');
  10.  $filename = 'uploaded_'.sha1($file->getOriginalName());
  11.  $extension = $file->getExtension($file->getOriginalExtension());
  12.  $file->save(sfConfig::get('sf_upload_dir').'/plakaty/'.$filename.$extension);
  13.        
  14.  return parent::updateObject();
  15. }
  16. ?>

?>[/php]
destroyerr
Napisz może co Ci przeszkadza w domyślnym zapisie pliku. Czyli bez Twojej metody updateObject.
Foxx
Gdy usuwam tą metodę plik ani się ładuje do bazy ani do katalogu.
W dokumentacji zwykle gdy pokazują upload to od razu tworzą specjalnie obsługę pliku... Czy sfWidgetFormInputFileEditable powinien sobie z tym sam radzić?

Od razu powiem, że gdybyś teraz powiedział "zrób tak i tak, wywal updateObject()" to i tak bym o to pytał bo jak tylko się z tym uporam to będę chciał modyfikować rozmiary uploadowanych obrazów...
destroyerr
No dobra, zrób tak i tak, wywal updateObject.
Skonfiguruj sfValidatorFile, chodzi o opcje path.

Ja modyfikuję rozmiary w nadpisanej metodzie processUploadedFile.
Foxx
Działa graduated.gif
Wielkie dzięki!
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.