忍者ブログ
[PR]
×

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



2024/04/24 11:32 |
AuraPHP 1.0.0 Aura.Router
Aura.Routerはルーティングを行います。

CakePHPのRouter、Symfonyのrouting.yml、ZendFrameworkのZend\Mvc\Routerのようなルーティング処理を行います。
もっともAura.Routerがやるのはパースだけなので、そこからルートを振り分ける処理は別途書かないといけません。
<?php
	require_once('path/to/channel/vendor/autoload.php');
	
	// Router
		$router = new Aura\Router\Map(
			 new Aura\Router\DefinitionFactory()
			,new Aura\Router\RouteFactory()
		);
	
	// ルーティングの登録
		// /
		$router->add('home', '/');
		// /2013/01/01
		$router->add('date', '/{:year:(\d+)}/{:month:(\d+)}/{:day:(\d+)}');
		// /2013/01/01/1
		$router->add('dateid', '/{:year:(\d+)}/{:month:(\d+)}/{:day:(\d+)}/{:id:(\d+)}');
		// /controller/action/1
		$router->add('article', '/{:controller}/{:action}/{:id:(\d+)}');
		// 他全て
		$router->add('default', '/*');
	
	// パース
		$route = $router->match($_SERVER['PATH_INFO'], $_SERVER);
		
		// 'index.php/2013/1/2/3' でアクセスした場合
		$route->name; // dateid
		$route->values; // array('year'=>'2013', 'month'=>'1', 'day'=>'2', 'id'=>'3' )
		$route->regex; // "/(?P<year>\d+)/(?P<month>\d+)/(?P<day>\d+)/(?P<id>\d+)"
		$route->path; // "/{:year}/{:month}/{:day}/{:id}"
		
		// 'index.php/a/b/1' でアクセスした場合
		$route->name; // article
		$route->values; // array('controller'=>'a', 'action'=>'b', 'id'=>'1')
		$route->regex; // "/(?P[^/]+)/(?P[^/]+)/(?P\d+)"
		$route->path; // "/{:controller}/{:action}/{:id}"
		
		// 'index.php/hoge/fuga'  でアクセスした場合
		$route->name; // default
		$route->values; // array('*'=>array('hoge', 'fuga'))
		$route->regex; // "/(?P<__wildcard__>.*)"
		$route->path; // "/{:__wildcard__}"
公式の例ではmod_rewrite前提で、http://example.jp/a/b/cのようなURLを想定していますが、mod_rewriteを利用しないときはhttp://example.jp/index.php/a/b/cみたいなURLになります。
そしてparse_url()の引数に$_SERVER['REQUEST_URI']を指定していますが、mod_rewriteが無い場合はREQUEST_URIは正しくパースしてくれません。
そのため今回は$_SERVER['PATH_INFO']を突っ込んでます。
なんかここらへん自動判別とかできないんだろうか。

Aura\Router\Mapに対してルーティングを適当にセットし、その後match()メソッドに'/2013/1/2/3'のようなパスを投げることで、ルーティングに従ってパスを分解したAura\Router\Routeインスタンスが帰ってきます。
あとはnameとvaluesを使って適当なコントローラなりアクションなりを呼び出すようにするとよいでしょう。

最後の'/*'はデフォルトルートです。
既存のルートいずれにも当て嵌まらなかった場合にここに来ます。
デフォルトルートは別に書かなくてもかまいませんが、その場合$route = falseになります。

また'/foo/bar/*'と書くと'/foo/bar/baz'や'/foo/bar/baz/qux'など'/foo/bar/'以下全てのURLをルーティング可能です。

これらを組み合わせて、各URLに対するアクション等を振り分けていきましょう。
Aura.Routerを利用することで、URLからのルーティング処理を簡単に行うことができるようになりました。


AuraPHPの記事
PR


2013/05/20 22:49 | Comments(0) | PHP

コメント

コメントを投稿する






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



<<ショートカットメニュー:AuraPHP | HOME | 買ったものリスト 2013/05/19>>
忍者ブログ[PR]