Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Frameworki _ [SF][Symfony 3] Problem z biblioteką PHPWord

Napisany przez: swiezak 26.01.2019, 13:43:31

Witajcie, drodzy Forumowicze.
W pewnym projekcie programistycznym opartym o framework Symfony 3.3 potrzebuję wygenerować plik w formacie doc z pewną zawartością. Wybór padł na darmową bibliotekę PHPWord w wersji 0.16, którą zainstalowałem korzystając z composera. Opierając się o tutorial (https://ourcodeworld.com/articles/read/361/how-to-create-a-word-file-with-php-in-symfony-3), próbowałem skorzystać z jej "dobrodziejstw". Niestety, mam problem z przestrzenią nazw.

Monit, który otrzymuję jest następujący:

  1. Attempted to load class "PhpWord" from namespace "PhpOffice\PhpWord". Did you forget a "use" statement for another namespace?


W kontrolerze wywołuję bibliotekę w poniższy sposób:
  1. use PhpOffice\PhpWord\PhpWord;
  2. use PhpOffice\PhpWord\IOFactory;
  3.  
  4. public function generateDocAction(Request $request)
  5. {
  6. require_once $this->get('kernel')->getRootDir() . '/../vendor/autoload.php';
  7.  
  8. $phpWord = new \PhpOffice\PhpWord\PhpWord();
  9. $section = $phpWord->addSection();
  10.  
  11. $section->addText(
  12. '"Learn from yesterday, live for today, hope for tomorrow. '
  13. . 'The important thing is not to stop questioning." '
  14. . '(Albert Einstein)'
  15. );
  16.  
  17. $objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');
  18. $fileName = 'download_file.docx';
  19. $temp_file = http://www.php.net/tempnam(sys_get_temp_dir(), $fileName);
  20. $objWriter->save($temp_file);
  21.  
  22. $response = new BinaryFileResponse($temp_file);
  23. $response->setContentDisposition(
  24. ResponseHeaderBag::DISPOSITION_ATTACHMENT,
  25. $fileName
  26. );
  27.  
  28. return $response;
  29. }


Debuger zatrzymuje się na linijce:
  1. $phpWord = new \PhpOffice\PhpWord\PhpWord();


Zmieniłem na:
  1. $phpWord = new PhpWord();

i ten sam objaw, co wyżej.

Próbowałem różnych zabiegów, mających na celu eliminację wspomnianego błędu (m.in. dodałem w pliku composer.json w sekcji "classmap" stosowną ścieżkę):
  1. "vendor/phpoffice/phpword/src/PhpWord/PhpWord.php"

ale bez rezultatu.

Czy ktoś z Was korzystał z tego rozwiązania i podpowie na co należy zwrócić uwagę i co zrobić, aby to działało jak należy?

Będę wdzięczny za zainteresowanie tematem i pomoc.

Napisany przez: Pyton_000 26.01.2019, 17:24:26

wywaliłeś cache symfony?

Napisany przez: swiezak 26.01.2019, 17:59:46

Pierwsze, co zrobiłem to wyczyściłem symfoniasty cache do zera, jednak to nic nie dało.
Wygląda na jakiś bug w bibliotece. Ten sam błąd jest sygnalizowany na localhoście przy PHP w wersji 5.6, jak również na hostingu, gdzie PHP oznaczone jest numerkiem 7.2.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)