1

次のルートを機能させようとしています。

$router->add('/([a-z]{2})/:namespace/:controller/:action/([^\/]+)', array(
    'language' => 1,
    'namespace' => 2,
    'controller' => 3,
    'action' => 4,
    'location' => 5
))->setName('location');

Volt テンプレートの関連する (テスト目的のみの) 行は次のようになります。

{{  url({'for': 'location', 'namespace': 'weather', 'controller': 'forecast', 'action': 'precipitation', 'location': 'Hamburg' }) }}

私が欲しいのは//weather/forecast/降水量/ハンブルグですが、代わりに取得できるのは//weather/forecast/降水量/だけです。

次に試したのは

$router->add('/([a-z]{2})/:namespace/:controller/:action/{location:[^\/]+}', array(
    'language' => 1,
    'namespace' => 2,
    'controller' => 3,
    'action' => 4,
))->setName('location');

これにより、少なくとも URL の場所がわかりましたが、完全に間違った位置でした: //Hamburg/forecast/降水量/ .

今、Library\Mvc\Router を調べたところ、get()に渡される配列は問題ないように見えます。

Array
(
    [for] => location
    [namespace] => weather
    [controller] => forecast
    [action] => precipitation
    [location] => Hamburg
    [language] => en
)

独自のルーターを使用して翻訳された URL を処理するので、ここでは言語パラメーターを無視できると思います。これまでのところ、カスタム Router は元の Router を呼び出すだけです。

ロケーションパラメータを機能させる方法はありますか?

4

1 に答える 1

0

ルーターのドキュメントに記載されているすべての可能性をテストし、Phalcon 2.0 のルーターの実装も調べました(このバージョンを使用していますか?!)。うまくいった唯一のことは、組み込みのプレースホルダーをルートパターンから削除する必要があったとしても、名前付きパラメーターをまったく使用しないことでした:

$this->add('/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_]+)/([^\/]+)', array(
    'namespace' => 1,
    'controller' => 2,
    'action' => 3,
    'location' => 4,
))->setName('location');

言い換えれば、これは私にはバグのように思えます。さらに調査するには、お気軽にバグを報告してください。

言語パラメーターについては、この質問を既に見たかどうかはわかりませんが、同様の方法でこれを処理できます。

于 2014-12-11T13:15:29.330 に答える