2

CakePHPでアプリを作成していますが、1つのCakePHPインストール内で「複数の」アプリを実行する必要があります。すべてのアプリケーションで同じように動作するn個のコントローラーがありますが、データベースを呼び出す場合にのみ異なります。とにかく、次のように動作するルートを作成する必要があります。

/ app1 / controller / action / a / b / c
/ app2 / controller / action / a / b / c

(ここでapp1app2は何にでも変更できる英数字の文字列です)

これは、次のようなものにルーティングされます。

/ controller / action / app1 / a / b / c
(またはapp2なども同じです)

ルーティングされたルートも同様である可能性がありますが、コントローラー内のURLの/部分/controller/action/a/b/cにアクセスする方法が必要です(コントローラー内でさらに処理するため)。CakePHPでこれを行う方法はありますか?ありがとう。app1app2

少し関連する質問:上記が達成されたときに、「デフォルト」のアプリ名を設定する方法はありますか(アクセスしようとする/controller/action/a/b/cと、入力するのと同じように自動的にルーティングされます/global/controller/action/a/b/cか?)

ありがとう!

効果的に:私が欲しいのは、ルーティング(またはこれを行うことができる他のCakePHPの「メソッド」)を使用して、「foobar」のようなURLを処理し、どういうわけかコントローラーに渡す/foobar/controller/action/the/restことです。「Foobar」は任意の英数字の文字列です。/controller/action/the/rest

4

2 に答える 2

2

加えapp/Config/routes.phpて:

Router::connect( 
    '/:app/:controller/:action/*', 
    array(), 
    array( 'pass' => array( 'app' ))
);

appこれにより、コントローラーのアクションに最初の引数としての値が渡されます。したがって、コントローラーで次のようなことを行います。

class FoosController Extends AppController {
    public function view_something($app, $a, $b, $c) { 
        // ...
    }
}

would be/myApp1/foos/view_something/1/2/3の値をリクエストすると、 would beなどの値になります。$app'myApp1'$a1

他のルートを接続するには、上記の前に、次のようなものを追加できます。

Router::connect(
    '/pages/:action/*',
    array( 'app' => 'global', 'controller' => 'pages' ),
    array( 'pass' => array( 'app' )) // to make app 1st arg in controller
);
于 2012-07-13T05:00:46.503 に答える
1

ルーティングの代わりに、Model 属性 -> dbconfigを使用してデータベースを動的に変更する必要があります。また、アプリケーションに接続する必要があるデータベースを特定できるように、いくつかの引数をメソッドに送信する必要もあります。

于 2012-07-13T04:22:58.050 に答える