FuelPHPでphpQueryを使う
phpQueryというjQueryライクな、PHPのDOMパーサライブラリがあります。
これをFuelPHPから使いたかったのですが、
FuelPHPは1.6からデフォルトでComposerに対応しているので、
どうせならComposerから入れてみようと思ったのですが若干ハマりました。
phpQuery
http://code.google.com/p/phpquery/
というのも、phpQueryはcomposer.jsonは持っておらず、
composer.jsonのrequireに php-query/phpQuery って書けばいいってもんじゃないから。
というわけで、composer.json と格闘してみました。
その前に
この後いろいろサンプル書きますが、require には、常に以下のように指定しています。
"require": { "phpquery/phpQuery": "*" }
PEARでいれてみる
composer.json の repositories 項目にもにょもにょする事で、
packagist以外にも対応するらしいです。
repositories (root-only)
http://getcomposer.org/doc/04-schema.md#repositories
Custom package repositories to use.
By default composer just uses the packagist repository. By specifying repositories you can get packages from elsewhere.
で、このrepositories ですが、PEARに対応しています。
PEAR
http://getcomposer.org/doc/05-repositories.md#pear
phpQueryはpearも用意されてるので、なんだ楽勝じゃんと思い、普通に指定してみました。
"repositories": [ { "type": "pear", "url": "http://phpquery-pear.appspot.com/", "vendor-alias": "phpquery" } ]
phpQueryのドキュメントに書いてあるのをそのまま書いたような感じです。
PEAR installation
pear channel-discover phpquery-pear.appspot.com
pear install phpquery/phpQuery
vendor-alias
を指定しないと、require
のところで、
pear-phpquery-pear.appspot.com
のように指定しなきゃいけないらしいです。
詳しくはComposerのドキュメントを参考にしてください。
Without a vendor alias, Composer will use the PEAR channel name as the vendor portion of the package name: pear-pear.foobar.repo/BasePackage
で、これでやってみたところ、
- Installing pear-phpquery-pear.appspot.com/phpquery (0.9.5.386)
Downloading: connection...[Composer\Downloader\TransportException]
The "http://phpquery-pear.appspot.com/get/phpQuery-0.9.5.386.tgz" file could not be downloaded (HTTP/1.0 404 Not Found)
ってエラーが出てだめだった。phpQueryのPEARのチャンネルには接続できてるみたいなので、何か認証に条件でもあるのかもしれないね。
だめなので次。
SVNからやってみる
repositories は VCS (version-control-system) にも対応しています。
なので、レポジトリから入れちゃいましょう。
VCS
http://getcomposer.org/doc/05-repositories.md#vcs
を参考にしてやってみます。
{ "type": "vcs", "url": "http://phpquery.googlecode.com/svn/trunk/" }
はい。エラーになりました。
[Composer\Repository\InvalidRepositoryException]
No valid composer.json was found in any branch or tag of http://phpquery.googlecode.com/svn/trunk/, could not load a package from it.
VCSの場合は、composer.json をライブラリ側で持つ必要があるみたいですね。
packagistに登録してなくてcomposer.jsonを持ってるパターンってあんまりなさそうなので使い道は少なそうですね。
ゴリッと package でやってみる
repositories のところで使える、 composer, vcs, pear は、
composerが標準で対応していて「スマート」に使える感じなのですが、
それら以外のやつを無理やり使うための package
というものがあります。
package
http://getcomposer.org/doc/05-repositories.md#package-2
{ "type": "package", "package": { "name": "phpquery/phpQuery", "version": "0.9.5", "dist": { "url": "http://phpquery.googlecode.com/files/phpQuery-0.9.5.386.zip", "type": "zip" }, "source": { "url": "http://phpquery.googlecode.com/svn/trunk/", "type": "svn", "reference": "tags/0.9.5/phpQuery" }, "autoload": { "files": ["phpQuery/phpQuery.php"] } } }
pearやvcsと違い、いろいろ事細かに設定しています。
これでようやくインストールでき、アプリ側からrequire等せずに phpQuery
クラスにアクセスできるようになりました。
なかなか面倒くさいねー。
最後に
試してないですが、
duvanmonsa/phpQuery
https://github.com/duvanmonsa/phpQuery
という、composer.json をつけたphpQueryを(たぶん)第三者の方が公開されてます。
面倒だったらこっち使ったほうが楽かもしれないですね。
ハマったことで、composer.json のスキーマの理解が深まったので、これからドシドシComposerを使って行きたいなと思いましたとさ。