CakePHP中的可变前缀路由

我正在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
);
上一篇:javascript-vue-router始终创建一个新的Component实例


下一篇:Linux:如何从C设置默认路由?