我正在CakePHP中创建一个应用程序,这需要我在一个CakePHP安装中运行“多个”应用程序.像我有n个控制器,它们对所有应用程序的行为都一样,但是它们仅在我调用数据库时有所不同-无论如何,我需要创建一个行为如下的路由:
/app1/controller/action/a/b/c
/app2/controller/action/a/b/c
(其中app1和app2是可以更改为任何内容的字母数字字符串)
那将被路由到类似:
/controller/action/app1/a/b/c
(或与app2相同,依此类推)
路由的路由也可能只是/ controller / action / a / b / c,但我需要一种方法来访问控制器内URL的app1 / app2部分(以便在控制器内进行进一步处理). CakePHP有办法做到这一点吗?谢谢.
稍微相关的问题:完成上述操作后,是否有办法设置“默认”应用程序名称(例如,当我尝试访问/ controller / action / a / b / c时,它将自动被路由为等效于键入/全局/控制器/动作/ A / b / C 2)
谢谢!
有效地:我想要的只是使用路由(或其他可以执行此操作的CakePHP“方法”)来处理/ foobar / controller / action / the / rest之类的URL到/ controller / action / the / rest并传递“ 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
);