Zend\Uri\Uriは、URLなどを論理的に作成・分析できますよというクラスです。
APIを呼び出す際のURLを論理的に作成したり、ユーザ入力値の検証などに使えるでしょう。
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
APIを呼び出す際のURLを論理的に作成したり、ユーザ入力値の検証などに使えるでしょう。
01 | <?php |
02 | require_once ( 'path/to/channel/vendor/autoload.php' ); |
03 | |
04 | // HTTP |
05 | $http = 'http://example.com/foo/../bar.php?a=1&b=2#hoge' ; |
06 | $uri = Zend\Uri\UriFactory::factory( $http ); |
07 | |
08 | // 分析 |
09 | // 正しいURLか |
10 | $uri ->isValid(); // true |
11 | // 正しい相対パスか |
12 | $uri ->isValidRelative(); // false |
13 | // 絶対パスか |
14 | $uri ->isAbsolute(); // true |
15 | |
16 | // スキーマを取得 |
17 | $uri ->getScheme(); // http |
18 | // ユーザ名/パスワードを取得 |
19 | $uri ->getUserInfo(); // NULL |
20 | // ホスト名を取得 |
21 | $uri ->getHost(); // example.com |
22 | // ポート番号を取得 |
23 | $uri ->getPort(); // 80 |
24 | // パスを取得 |
25 | $uri ->getPath(); // /foo/../bar.php |
26 | $uri ->getQuery(); // a=1&b=2 |
27 | $uri ->getQueryAsArray(); // array('a'=>'1', 'b'=>'2') |
28 | $uri ->getFragment(); // hoge |
29 | |
30 | // 参照を解消 |
31 | $uri ->normalize()->toString(); // http://example.com/bar.php?a=1&b=2#hoge |
32 | // ベースURIからの相対パスにする |
33 | $uri ->makeRelative( 'http://example.com/foo/' )->toString(); // bar.php?a=1&b=2#hoge |
34 | /* ../bar.php?a=1&b=2#hogeにならないのはバグな気がする */ |
35 | |
36 | // 作成 |
37 | $uri ->setScheme( 'https' ); |
38 | $uri ->setUserInfo( 'user:pass' ); |
39 | $uri ->setHost( 'example.jp' ); |
40 | $uri ->setPort(443); |
41 | $uri ->setPath( '/fuga.php' ); |
42 | $uri ->setQuery( array ( 'c' => '3' , 'd' => '4' )); |
43 | $uri ->setFragment( '' ); |
44 | |
45 | $uri ->toString(); // https://user:pass@example.jp:443/fuga.php?c=3&d=4 |
今回は'http'なのでZend\Uri\Httpクラスのインスタンスとなります。
他にも色々あるかと思いきや、実は'mailto'のZend\Uri\Mailto、'file'のZend\Uri\Fileしかありません。
FTPすら無いとはびっくりだ。
ところでこれがDIなんですかね、いまいちわかりません。
normalize()やmakeRelative()はsetという名前は付いていませんがオブジェクトを直接書き換えるので、以後getScheme()やgetPath()などの値が変わる可能性があります。
少しだけ気をつけましょう。
このようにZend\Uri\Uriを使うことで、URLの論理的な組み立て、分解が可能になりました。