我正在CakePHP中创建一个应用程序,它要求我在一个CakePHP安装中运行"多个"应用程序。类似于我有n控制器,它们对所有应用程序的行为都是一样的,但它们只是在我调用数据库时不同——无论如何,我需要创建一个行为如下的路由:
/app1/controller/action/a/b/c
/app2/controller/action/a/b/c
(其中app1
和app2
是可以更改为任何内容的字母数字字符串)
这将被路由到以下内容:
/controller/action/ap1/a/b/c(对于app2,依此类推)
路由的路由也可能只是/controller/action/a/b/c
,但我需要有一种方法来访问控制器内URL的app1
/app2
部分(以便在控制器内进行进一步处理)。有没有一种方法可以在CakePHP中做到这一点?谢谢
稍微相关的问题:完成上述操作后,是否有方法设置"默认"应用程序名称(例如,当我尝试访问/controller/action/a/b/c
时,它将自动路由到相当于键入/global/controller/action/a/b/c
的位置?)
谢谢!
有效:我想要的只是使用Routing(或任何其他可以做到这一点的CakePHP"方法")来处理像/foobar/controller/action/the/rest
到/controller/action/the/rest
这样的URL,并将"foobar"传递给控制器,以某种方式。"Foobar"是任何字母数字字符串。
在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) {
// ...
}
}
当您请求/myApp1/foos/view_something/1/2/3
时,$app
的值将是'myApp1'
,$a
的值将为1
,等等。
要连接其他路由,在前面,您可以添加以下内容:
Router::connect(
'/pages/:action/*',
array( 'app' => 'global', 'controller' => 'pages' ),
array( 'pass' => array( 'app' )) // to make app 1st arg in controller
);
您应该使用Model attribute->dbconfig来动态更改数据库,而不是路由。此外,您还应该向方法发送一些参数,通过这些参数可以确定哪个数据库需要与应用程序连接。