2012-07-13 89 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