0

API の新しいバージョンを作成しており、バージョンごとに別個のコントローラー セットを用意してレガシー バージョンをサポートしたいと考えています。Lithium のデフォルトの「app\controllers」パス内に、たとえば「v1」と「v2」のパスが必要です。

私は次のようなことをして、ルート自体の中でこれを達成しようとしました:

 Router::connect('/{:version}/{:controller}/{:action}{:args}', array(
        'controller'=> '\app\controllers\{:version}\{:controller}Controller',
    ), array());

次に、次のようなことを行って、ライブラリ ブートストラップ モジュールのパスをオーバーライドしようとしました。

if( preg_match('/^\/(v[0-9\.]+)/', $_SERVER['REQUEST_URI'], $match) ) {
    Libraries::paths(array(
        'controllers' => "controllers\\".$match[1].'\\{:name}Controller',
        'models' => "models\\".$match[1]."\\{:name}",
    ));
}

私はグーグルと非常にまばらなリチウムのドキュメントを検索するために仕事で約半日を費やしました. この既存のコード ベースに足を踏み入れたので、使用している Lithium のリリースがわかりません。

あなたが持っているかもしれないヒントをありがとう!

4

1 に答える 1

2

routes.php ファイルで、Dispatcher のデフォルト ルールを次のように再構成する必要があります。

Dispatcher::config(array('rules' => array(
  'v1' => array('controller' => 'app\controllers\v1\{:controller}Controller')
)));

/v1/... リクエストに一致する継続ルート

Router::connect('/v1/{:args}', array('v1' => true), array(
  'continue' => true, 'persist' => array('controller', 'v1')
));

:version必要に応じて、定義済みのバージョン番号の代わりに簡単に使用できます。

于 2012-09-05T22:05:24.817 に答える