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