なんでもそろってる(ように見える)Symfony Componentですが、実はPDF関係がありませんw
で、ZendFrameworkにはZendPdfがあるので、サクッとそっちを使います。
こういうときPSR-0が非常にありがたいですね♪
…といってもZendFramework2にはまだ(?)ZendPdfが含まれてないのですね。
でもgithubにレポジトリがあります。
https://github.com/zendframework/ZendPdfbuild statusがunknownになってたりとやや不安ではありますが…。
まぁソースを見たらほとんどzf1でのZendPdfにnamespaceつけただけっぽいので大丈夫でしょう。たぶん。
ということで、人柱になってみることにしました。
Symfony2のプロジェクト全体をcomposerで管理しているのでZendPdfのインストールもcomposerを使います。
自分のプロジェクトのcomposer.jsonを開き、requireの末尾に
"zendframework/zendpdf": "dev-master"
を足しました。
早速 composer.phar update してみると、パッケージが無いよ、と怒られます。
そこで、repositories設定を足すことにします。
公式サイトにはtypeをcomposerにしてhttps://packages.zendframework.com/を足せと書いてあります。
が、これをそのまま加えてcomposer.phar updateすると、パッケージは見つかるものの、バージョンポリシーがどうのこうの(要するにdev以上のステータスのものがないよ)build status: unknownがここで効いてきたっぽいorz
ここで色々試行錯誤したのですが、最終的にはtypeをvcsにしてgithubのレポジトリのURLをセットしたらcomposer.phar updateでインストールできるようになりました。
"require" : {
(略)
"zendframework/zendpdf": "dev-master"
},
"repositories": [
{
"type": "vcs",
"url": "https://github.com/zendframework/ZendPdf"
}
],
ZendPdf使えたー!やったー!だけで良い人はここまで。以下は余談です。
……………
実は、上記の設定でcomposer.phar updateをするとzendframework/zendframeworkとzendframework/zendpdfの二つのパッケージがインストールされます。
zendframework/zendframeworkは言わずと知れたZendFramework2の総合パッケージです。容量でかいです。
開発環境だけならまだ良いですが、ライブラリがやたらと肥大するのはサーバーにリリースする時に不便です。(転送に時間かかったり、サーバーマシンのメモリではcomposerで初期化する時やたらと時間がかかったり)
でも、ZendPdfのcomposer.jsonを見ると
https://github.com/zendframework/ZendPdf/blob/master/composer.json依存ライブラリはzend-memoryとzend-stdlibだけのようです。
つまり、最低限zend-stdlibとzend-memoryだけ入れればZendPdfは動く(はず)わけで、他の大量のライブラリは要らないわけです。
そこで、composer.jsonを下記のように書き換えてみることにしました。
zend-stdlibとzend-memoryへの依存を明示してあげます。
"require" : {
(略)
"zendframework/zend-stdlib" : ">=2.0.0",
"zendframework/zend-memory" : ">=2.0.0",
"zendframework/zendpdf": "dev-master"
},
"repositories": [
{
"type": "vcs",
"url": "https://github.com/zendframework/ZendPdf"
},
{
"type": "composer",
"url": "https://packages.zendframework.com/"
}
],
この状態でcomposer.phar updateすることで、無事にzend-stdlib,zend-memory,zendpdfだけが入りました。