Aura.Routerはルーティングを行います。
CakePHPのRouter、Symfonyのrouting.yml、ZendFrameworkのZend\Mvc\Routerのようなルーティング処理を行います。
もっともAura.Routerがやるのはパースだけなので、そこからルートを振り分ける処理は別途書かないといけません。
そして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の記事
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