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:
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:
use PhpOffice\PhpWord\PhpWord; use PhpOffice\PhpWord\IOFactory; public function generateDocAction(Request $request) { require_once $this->get('kernel')->getRootDir() . '/../vendor/autoload.php'; $phpWord = new \PhpOffice\PhpWord\PhpWord(); $section = $phpWord->addSection(); $section->addText( '"Learn from yesterday, live for today, hope for tomorrow. ' . 'The important thing is not to stop questioning." ' . '(Albert Einstein)' ); $objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007'); $fileName = 'download_file.docx'; $objWriter->save($temp_file); $response = new BinaryFileResponse($temp_file); $response->setContentDisposition( ResponseHeaderBag::DISPOSITION_ATTACHMENT, $fileName ); return $response; }
Debuger zatrzymuje się na linijce:
$phpWord = new \PhpOffice\PhpWord\PhpWord();
Zmieniłem na:
$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ę):
"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.