Hallöchen,
ich bin momentan dabei eine Anwendung (Artikel- und Bestellverwaltung) von Symfony1.4 auf Flow umzuschreiben. Nachdem ich den Einstieg in Flow gefunden habe läuft das nun auch sehr gut. Ist zwar viel Arbeit aber ich habe den Eindruck, dass es sich lohnt. Sehr schön übersichtlicher Code.
Mein aktuelles Problem:
Wie binde ich PHPExcel ein? Gibt es da bereits ein Package für oder muss ich das selbst erstellen? Wenn ja, wie löse ich das Problem mit Namespaces vs. Autoloader für die PHPExcel-Klassen?
Ich mache es mir jetzt mal einfach und frage zuerst die Community, _bevor_ ich Stunden und Tage mit Try and Error verbringe. Hat jemand einen Tip für mich? Hoffe mal ich komme damit durch 😉
Hallo,
es gibt bisher, meines Wissens nach, kein Package dafür. Du kannst, wenn Du Flow Master benutzt (d.h. mit Composer) natürlich einfach das Composer Package installieren (https://packagist.org/packages/phpexcel/phpexcel).
Wenn du den Composersupport noch nicht hast und auch nicht upgraden willst, dann würde ich mir ein Package dafür bauen und die Library in Resources/Private/Php/ deines Package ablegen und dann in der Package.php z.B. includen. Das dürfte nur eine Datei sein, da phpexcel seinen eigenen autoloader mitbringt.
Danke für die schnelle Antwort kitsunet,
Früher gab es mal so was wie Pear, damit kenne ich mich ja noch aus. OK, ich geb es zu, ich habe keine Ahnung was "Flow Master mit Composer" ist. Aber kein Problem, ich fauler alter Sack werde mal danach googeln und mich informieren 🙂
Und ich versuche dann mal ein eigenes Package zu bauen. Ich werde mich an deinem TcPdf-Package orientieren und hoffen, dass der autoloader dann irgendwie funktioniert.
Melde mich wieder, Danke 🙂
EDIT:
Ich arbeite momentan mit Flow 1.1.0
Super, klappt alles soweit. Excel-Dateien werden erzeugt.
Ich habe nun wie von kitsunet vorgeschlagen ein eigenes Paket erstellt und PHPExcel im Verzeichnis Resources/Private/Php/ abgelegt. Die Datei Package.php includet dann die Hauptdatei PHPExcel.php welche wiederum den Autoloader aktiviert.
So irgendwie, jedenfalls läufts und war ganz einfach. Problem gelöst. Danke schön :p
Packages\Application\Acme.PhpExcel\Classes\Package.php:
<?php
namespace Acme\PhpExcel;
use TYPO3\FLOW3\Package\Package as BasePackage;
use TYPO3\FLOW3\Annotations as FLOW3;
/**
* Package base class of the Acme.PhpExcel package.
*
* @FLOW3\Scope( "singleton" )
*/
class Package extends BasePackage {
/**
* Invokes custom PHP code directly after the package manager has been initialized.
*
* @param \TYPO3\FLOW3\Core\Bootstrap $bootstrap The current bootstrap
* @return void
*/
public function boot(\TYPO3\FLOW3\Core\Bootstrap $bootstrap) {
require(__DIR__ . '/../Resources/Private/PHP/PHPExcel/PHPExcel.php');
}
}
?>
Edit:
Ach ja, eine Sache irritiert mich doch immer wieder, weil ich es nicht gewohnt bin. Man muss jede PHPExcel-Klasse die man in seinem Script nutzen will mit "use" deklarieren. Das hat wohl mit den Namespaces zu tun, mit denen ich mich erst noch anfreunden muss 🙂
Z.B.:
use PHPExcel;
use PHPExcel_Worksheet_PageSetup;
use PHPExcel_Style_Border;
use PHPExcel_Style_Alignment;
use PHPExcel_Cell_DataType;
Du musst die "use .." Statements nicht benutzen. Du kannst auch den vollen Namespace zur Klasse angeben.
Also wenn du:
$foo = new PHPExcel();
benutzen willst, dann brauchst du es, du kannst aber auch:
$foo = new \Ich\Kenn\Den\Namespace\Nicht\PHPExcel();
machen. Dann brauchst du das nicht. Bzw. wenn PHPExcel selbst gar keine Namespaces deklariert dann gilt (ohne "use" ):
$foo = new \PHPExcel();
kitsunet schrieb
Du musst die "use .." Statements nicht benutzen. Du kannst auch den vollen Namespace zur Klasse angeben.
Danke nochmals. Du hast natürlich Recht. Ich kann die use-Statements auch weglassen und dem Namen der PHPExcel-Klasse einen Backslash voranstellen.
Z.B.:
$sheet->getPageSetup()->setOrientation(\PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE);
Statt:
use PHPExcel_Worksheet_PageSetup;
$sheet->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE);