忍者ブログ
[PR]
×

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



2024/04/19 10:31 |
Zend Framework2.1.4 Zend\Uri\Uri
Zend\Uri\Uriは、URLなどを論理的に作成・分析できますよというクラスです。
APIを呼び出す際のURLを論理的に作成したり、ユーザ入力値の検証などに使えるでしょう。

<?php
	require_once('path/to/channel/vendor/autoload.php');
	
	// HTTP
	$http = 'http://example.com/foo/../bar.php?a=1&b=2#hoge';
	$uri = Zend\Uri\UriFactory::factory($http);
	
	// 分析
		// 正しいURLか
		$uri->isValid(); // true
		// 正しい相対パスか
		$uri->isValidRelative(); // false
		// 絶対パスか
		$uri->isAbsolute(); // true
		
		// スキーマを取得
		$uri->getScheme(); // http
		// ユーザ名/パスワードを取得
		$uri->getUserInfo(); // NULL
		// ホスト名を取得
		$uri->getHost(); // example.com
		// ポート番号を取得
		$uri->getPort(); // 80
		// パスを取得
		$uri->getPath(); // /foo/../bar.php
		$uri->getQuery(); // a=1&b=2
		$uri->getQueryAsArray(); // array('a'=>'1', 'b'=>'2')
		$uri->getFragment(); // hoge
		
		// 参照を解消
		$uri->normalize()->toString(); // http://example.com/bar.php?a=1&b=2#hoge
		// ベースURIからの相対パスにする
		$uri->makeRelative('http://example.com/foo/')->toString(); // bar.php?a=1&b=2#hoge
			/* ../bar.php?a=1&b=2#hogeにならないのはバグな気がする */
		
	// 作成
		$uri->setScheme('https');
		$uri->setUserInfo('user:pass');
		$uri->setHost('example.jp');
		$uri->setPort(443);
		$uri->setPath('/fuga.php');
		$uri->setQuery(array('c'=>'3', 'd'=>'4'));
		$uri->setFragment('');
		
		$uri->toString(); // https://user:pass@example.jp:443/fuga.php?c=3&d=4
Zend\Uri\UriFactory::factoryにチェックしたいURLを突っ込むと、適切なZend\Uri\UriInterface実装クラスが帰ってきます。
今回は'http'なのでZend\Uri\Httpクラスのインスタンスとなります。
他にも色々あるかと思いきや、実は'mailto'のZend\Uri\Mailto、'file'のZend\Uri\Fileしかありません。
FTPすら無いとはびっくりだ。
ところでこれがDIなんですかね、いまいちわかりません。

normalize()やmakeRelative()はsetという名前は付いていませんがオブジェクトを直接書き換えるので、以後getScheme()やgetPath()などの値が変わる可能性があります。
少しだけ気をつけましょう。

このようにZend\Uri\Uriを使うことで、URLの論理的な組み立て、分解が可能になりました。

PR


2013/04/22 23:50 | Comments(0) | PHP

コメント

コメントを投稿する






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



<<AuraPHP 1.0.0 Aura.Uri | HOME | 買ったものリスト 2013/04/21>>
忍者ブログ[PR]