忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2024/11/22 18:33 |
AuraPHP 1.0.0 Aura.Uri
Aura.Uriは、URLなどを論理的に作成・分析できますよというクラスです。
ってつい先日やった気がするな。

さて、どちらが優秀か試してみましょう。

<?php
	require_once('path/to/channel/vendor/autoload.php');
	
	// Aura.Uri
	$http = 'http://example.com/foo/../bar.php?a=1&b=2#hoge';
	$factory = new Aura\Uri\Url\Factory($_SERVER);
	$uri = $factory->newInstance($http);
	
	// 分析
		// スキーマを取得
		$uri->scheme; // http
		// ユーザ名/パスワードを取得
		$uri->user; // NULL
		$uri->pass; // NULL
		// ホスト名を取得
		$uri->host; // example.com
		// ポート番号を取得
		$uri->port; // NULL
		// パスを取得
		(string)$uri->path; // /foo/../bar.php
		(string)$uri->query; // a=1&b=2
		$uri->query->getArrayCopy(); // array('a'=>'1', 'b'=>'2')
		$uri->fragment; // hoge
		
		// 参照を解消
		$uri->get(); // /fuga.php?c=3&d=4
		
	// 作成
		$uri->setScheme('https');
		$uri->setUser('user');
		$uri->setPass('pass');
		$uri->setHost('example.jp');
		$uri->setPort(443);
		$uri->path->setFromString('/fuga.php');
		$uri->setFragment('');
		
		// $uri->query->buildString(array('c'=>3, 'd'=>4)); // Fatal error:Call to protected method
		$uri->query->a = 5; // 正しく動作しない
		$uri->query['b'] = 6; // OK
		$uri->query->setFromString('c=3&d=4'); // OK
		
		(string)$uri; // https://user:pass@example.jp:443/fuga.php?c=3&d=4

Factory::getInstance($http)みたいなstaticメソッドが無く、いちいち無意味なインスタンス化をしないといけないのがよくわかりません。
基本的にZend\Uri\Uriと同等のことができますが、is**の検証系メソッドはありません。

AuraはtoString()のようなメソッドをあまり持たず、マジックメソッド__toString()で文字列変換を実装しています。
なので文字列にしたい場合はStringにキャストしましょう。

プロパティは概ねStringですが、pathとqueryだけクラスになっています。
そしてこのAura\Uri\Queryには問題があります。

まずQuery::buildString()が何故かprotectedなので、Zend\Uri\Uri::setQueryのような配列形式での投入ができません。
そしてヘルプでは$url->query->baz = 'zab';とか書いてありますが、実はこれが正しく動作しません。
Aura\Uri\Queryは\ArrayObjectをextendsしているのですが、呼び出しの引数に\ArrayObject::ARRAY_AS_PROPSを記述していないせいで、プロパティと配列が別の値として扱われます。
Aura\Uri\Queryは内部値を配列形式で取り扱っているため、プロパティで指定した値は反映されません。
思いっきりバグじゃねーかこれ。

指定するときは配列形式で指定するか、setFromString()を使いましょう。
なおsetFromString()は他の値を全部消して上書きするので、上記例ではaとbが消えています。


AuraPHPの記事

PR


2013/04/26 23:53 | Comments(0) | PHP

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<memocarilog『PHPを使ってはてなブックマークの人気エントリーを表示する』の感想 | HOME | Zend Framework2.1.4 Zend\Uri\Uri>>
忍者ブログ[PR]