2012-07-13 92 views
2

我在CakePHP中创建了一个应用程序,这需要我在一个CakePHP安装中运行“多个”应用程序。喜欢的东西我有ň控制器,表现为所有的应用程序是相同的,但他们只当我打电话数据库不同 - 无论如何,我需要建立它的行为是这样的路线:CakePHP中的变量前缀路由

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

(其中app1app2是可以换到任何字母数字串)

将被路由到类似:

/controller/action/app1/a/b/c
(或同为APP 2,依此类推)

路由的路由也可能只是/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/rest网址/controller/action/the/rest并通过“foobar的”控制器,莫名其妙。 “Foobar”是任何字母数字字符串。

回答

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

当你请求/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 
); 
+0

呜呼,谢谢。作为一个方面说明,如果/:app /未被传递,该怎么办?有没有办法指定它的默认值?就像我试图去/ pages/me一样,它可以进入/ global/pages/me吗?:P – 2012-07-13 05:03:19

+0

@JimmieLin请参阅编辑建议。 – 2012-07-13 05:10:58

+0

它的工作原理,非常感谢! – 2012-07-13 12:22:14

1

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

+0

请问是否它不适合你。 – 2012-07-13 04:23:12

+1

dbconfig只是一个方法,供我稍后处理控制器中的数据 - 我想要做的就是使用路由将参数发送到控制器 -/db_name/controller/action/the/rest/of/the/url/。如何使用路由来“取出”db_name并将其发送到相应的控制器? – 2012-07-13 04:31:19