前回、'index.php/2013/1/2/3'でルーティングした際にはcontrollerやactionがありませんでした。
これでは'index.php/a/b/1'の場合と揃えて、
$controller = new {$route->values['controller']};
$controller->{$route->values['action']};
とか書けません。
そこでパラメータやパース方法については別途設定することができます。
前者はadd()の第三引数にvaluesを指定しています。
match()で引っかかったときに、valuesを指定した値も一緒に帰ってくるようになります。
URLにコントローラやアクションを指定せずとも、任意のコントローラに振り分けることができるようになりました。
後者は、URLの形式と正規表現を別々に指定しています。
こちらの表記の方が、普通の正規表現なのでわかりやすいと思います。
最後、ブログの閲覧、更新など複数のルーティングを一括登録する方法です。
#全然関係ないけどSymfonyは今まで使ったことがあるFWの中で最も使いにくい
AuraPHPの記事
これでは'index.php/a/b/1'の場合と揃えて、
$controller = new {$route->values['controller']};
$controller->{$route->values['action']};
とか書けません。
そこでパラメータやパース方法については別途設定することができます。
<?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( 'date1' ,'/{:year:(\d+)}/{:month:(\d+)}/{:day:(\d+)}' ,array('values' => array( 'controller' => 'date', 'action' => 'read' )) ); // パース方法を別途設定 $router->add( 'date2' ,'/{:year}{:month}{:day}' ,array('params' => array( 'year' => '(\d\d\d\d)', 'month' => '(\d\d)', 'day' => '(\d\d)' )) ); // パース $route = $router->match($_SERVER['PATH_INFO'], $_SERVER); // 'index.php/2013/1/2' でアクセスした場合 $route->name; // date1 $route->values; // array('controller'=>'date', 'action'=>'read', 'year'=>'2013', 'month'=>'1', 'day'=>'2') // 'index.php/20130102' でアクセスした場合 $route->name; // date2 $route->values; // array('year'=>'2013', 'month'=>'01', 'day'=>'02')まずadd()の使用方法の拡張をふたつ。
前者はadd()の第三引数にvaluesを指定しています。
match()で引っかかったときに、valuesを指定した値も一緒に帰ってくるようになります。
URLにコントローラやアクションを指定せずとも、任意のコントローラに振り分けることができるようになりました。
後者は、URLの形式と正規表現を別々に指定しています。
こちらの表記の方が、普通の正規表現なのでわかりやすいと思います。
最後、ブログの閲覧、更新など複数のルーティングを一括登録する方法です。
<?php // ルーティンググループの登録 $router->attach('/blog', array( 'routes' =>array( 'blog_top' => '/' ,'blog_edit' => '/{:id:(\d+)}/edit' ,'blog_read' => array( 'path' => '/{:id}{:format}' ,'params' => array( 'id' => '(\d+)' ,'format' => '(\.json|\.atom)?' ) ,'values' => array( 'format' => '.html' ) ) ) )); // パース $route = $router->match($_SERVER['PATH_INFO'], $_SERVER); // 'index.php/blog/' でアクセス $route->name; // blog_top $route->values; // array('action'=>'blog_top') // 'index.php/blog/1' でアクセス $route->name; // blog_read $route->values; // array('action'=>'blog_read', 'format'=>'.html', 'id'=>'1') // 'index.php/blog/1/edit' でアクセス $route->name; // blog_edit $route->values; // array('action'=>'blog_edit', 'id'=>'1')sfDoctrineRouteCollectionみたいな便利おまとめルートはないので結局個別に設定が必要ですが、これでブログの作成/閲覧ルーティングがひととおりできあがりました。
#全然関係ないけどSymfonyは今まで使ったことがあるFWの中で最も使いにくい
AuraPHPの記事
PR