Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF] Wrzucanie pliku
Forum PHP.pl > Forum > PHP > Frameworki
IceManSpy
Witam

W końcu zabrałem się za naukę Zenda smile.gif Przeszedłem cały quick start i chcę pójść dalej. W obrębie tego tutoriala chciałem zrobić wrzucanie pliku na serwer. Niestety nie mogę sobie poradzic z tym problemem. Więc pokaże kod.
Formularz:
  1. class Application_Form_uploadFile extends Zend_Form
  2. {
  3.  
  4. public function init()
  5. {
  6. $this->addElement('file', 'uploadFile', array(
  7. 'destination' => APPLICATION_PATH.'/uploads',
  8. 'validators' => array(
  9. array('count', false, 1),
  10. array('size', false, 512000),
  11. ),
  12. 'label' => 'Wyślij plik:'
  13. ));
  14.  
  15. $this->addElement('submit', 'submit', array(
  16. 'label' => 'Wyślij'
  17. ));
  18.  
  19. $this->setEnctype('multipart/form-data');
  20. }
  21.  
  22. }

Kontroler:
  1. <?php
  2.  
  3. class PlikController extends Zend_Controller_Action
  4. {
  5.  
  6. public function init()
  7. {
  8. /* Initialize action controller here */
  9.  
  10. }
  11.  
  12. public function indexAction()
  13. {
  14. //$form = new Application_Form_uploadFile();
  15. $form = new Application_Form_uploadFile();
  16. //$this->view->information = "Info";
  17. $this->view->form = $form;
  18.  
  19.  
  20. if($this->getRequest()->isPost()) {
  21.  
  22. $formData = $this->getRequest()->getPost();
  23.  
  24.  
  25. if($form->isValid($formData)) {
  26. // Próba walidacji formularza
  27. $this->view->information = $information = 'Błąd podczas sprawdzania poprawności formularza.';
  28. } elseif (!$form->uploadFile->isUploaded()) { // Czy cokolwiek zostało wysłane?
  29. $this->view->information = $information = 'Nie wybrano pliku do wysłania.';
  30. } elseif (!$form->uploadFile->receive()) { // Odbiór pliku
  31. $this->view->information = $information = 'Błąd podczas odbierania pliku.';
  32. } else { // Sukces
  33. $this->view->information = $information = 'Plik ' . $form->uploadFile->getFileName()
  34. . ' został poprawnie wysłany.';
  35. }
  36. //$this->_helper->redirector('index');
  37. }
  38. //$this->view->information = "wysłano formularza";
  39. else {
  40. $this->view->information = "Nie wysłano formularza";
  41. }
  42. }
  43.  
  44. }

Widok:
  1. <br /><br />
  2. <div id="wrapper">
  3. <h1>Wysyłanie plików przy użyciu Zend_Form - Przykład 1</h1>
  4.  
  5. <div id="information">
  6. <?php echo $this->information; ?>
  7. </div>
  8.  
  9. <?php echo $this->form; ?>
  10.  
  11. </div>



I teraz gdy rzucam plik obrazkowy większy niż 500KB to dostaję błąd:
Błąd podczas odbierania pliku.
Maximum allowed size for file 'plik.jpg' is '500kB' but '508.13kB' detected . Czyli jest ok. A gdy wrzucam mniejszy, to odstaję:
Błąd podczas sprawdzania poprawności formularza.

Gdzie jest błąd? sad.gif Wiem, że może tutaj być dużo błędów, ale dopiero zaczynam.

Problem rozwiązał ten kod, ale chcę wiedzieć co jest nie tak z tamtym:
  1. if ($this->_request->isPost()) {
  2. $formData = $this->_request->getPost();
  3. if ($form->isValid($formData)) {
  4.  
  5. // success - do something with the uploaded file
  6. $uploadedData = $form->getValues();
  7. //Zend_Debug::dump($uploadedData, '$uploadedData');
  8. //$this->_helper->redirector('index');
  9.  
  10. } else {
  11. $form->populate($formData);
  12. }
  13. }
pawv
  1. #
  2. if($form->isValid($formData)) {
  3. #
  4. // Próba walidacji formularza
  5. #
  6. $this->view->information = $information = 'Błąd podczas sprawdzania poprawności formularza.';
  7. }


W tym miejscu sprawdzałeś czy formularz był poprawnie wypełniony, ponieważ był poprawnie wypełniony przesłałeś do widoku informację, która raczej powinna wyglądać jakoś w stylu "Gratulacje. Udało się" biggrin.gif
IceManSpy
Cytat(pawv @ 3.04.2011, 09:47:00 ) *
W tym miejscu sprawdzałeś czy formularz był poprawnie wypełniony, ponieważ był poprawnie wypełniony przesłałeś do widoku informację, która raczej powinna wyglądać jakoś w stylu "Gratulacje. Udało się" biggrin.gif

Zamieniłem komunikaty, ale nadal nie uploaduje pliku. Rozwiązaniem było dodanie linijki:
  1. $uploadedData = $form->getValues();

gdy formularz się walidował smile.gif
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.