逆引きルート名は使いやすいのだろうか。

ZendのMVCで単純にデフォルトのモジュールルートを使っている分には特に困ることはないのだが、CMSライクにURLをフルカスタマイズして利用する場合、逆引きの使い方にやや不安が・・・

リンク先はどのルートに格納されている?

たとえば、あるページから別のモジュールへのリンクへ貼りたいとする。デフォルトのRouter_Route_Moduleならurlヘルパーのパラメーターにモジュール名、コントローラー名等を入れればいいだけだが、ルーティングがRouter_Route_Moduleではなかった場合、ターゲットにしているルートのルート名がわからないとURLのassembleが出来ない。現在と同じroute内なら名前はnullでいいが、現在のルートとは別のルート名に分類されているリンクが作りにくい。urlヘルパーの第2引数のnameにルート名を入れるのだけれど、ルート名はどうやって特定するべきだろうか?

時には特定のルートを固定してしまい、 わざわざ正規表現エンジンを動かしたくない場合もあるでしょう。 そんなときには静的なルートを使用します。

<?php
$route = new Zend_Controller_Router_Route_Static(
    'login',
    array('controller' => 'auth', 'action' => 'login')
);
$router->addRoute('login', $route);
http://framework.zend.com/manual/ja/zend.controller.router.html#zend.controller.router.routes.static

このとき、authコントローラー、loginアクションを呼びたければ、それがloginというルート名で登録されていることを知らなければならない。この場合だけは、loginという意味付けされた名前だから良いが、単純にあるモジュールの中でRouter_RouteやRoute_Regex等を組み合わせて使っているときは、名前付けに意味を持たせるのは難しいから、どうやってルート名を取得するのか疑問がある。URL解決だけのために該当コントローラーにdispatchするのもおかしな話だし。また、Router_Routeに限らず必須パラメーターが不足していると容赦なく例外が飛んでくる。
抽象化されたルーティングシステムだけが用意されていて、あとは作る側で好きに使えということなんだろうけど。一体、これをどう解決していくのがうまい方法なのだろう・・・要調査

今のところ、このぐらいの対策をしておくか

  1. なるべく広いURLを解釈できるルートを登録する。
  2. ルート名の名前付けルールと参照ルールを明確にしておく。
  3. Route_Route_Moduleだけを利用する。