2

我在 CakePHP 中创建了一个应用程序,它要求我在一个 CakePHP 安装中运行“多个”应用程序。像我有n 个控制器,它们对所有应用程序的行为都相同,但它们仅在我调用数据库时有所不同 - 无论如何,我需要创建一个行为如下的路由:

/app1/控制器/动作/a/b/c
/app2/控制器/动作/a/b/c

(其中app1app2是可以更改为任何内容的字母数字字符串)

这将被路由到类似的东西:

/控制器/动作/app1/a/b/c
(或 app2 相同,依此类推)

路由路由也可以/controller/action/a/b/c,但我需要有一种方法来访问控制器内 URL 的app1/app2部分(以便在控制器内进一步处理)。有没有办法在 CakePHP 中做到这一点?谢谢。

稍微相关的问题:完成上述操作后,有没有办法设置“默认”应用程序名称(比如当我尝试访问/controller/action/a/b/c它时,它会自动路由到相当于打字的地方/global/controller/action/a/b/c?)

谢谢!

有效地:我想要的只是使用路由(或任何其他可以做到这一点的 CakePHP '方法')来处理诸如/foobar/controller/action/the/restto之类的 URL /controller/action/the/rest,并将“foobar”传递给控制器​​,不知何故。“Foobar”是任何字母数字字符串。

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) { 
        // ...
    }
}

当您请求will be的/myApp1/foos/view_something/1/2/3值时, will 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

您应该使用模型属性 -> dbconfig来动态更改数据库,而不是路由。此外,您还应该向方法发送一些参数,通过这些参数您可以确定哪个数据库需要与您的应用程序连接。

于 2012-07-13T04:22:58.050 回答