2011-09-26 141 views
2

是否有我創建動態自定義路由?目標是允許用戶指定他們想要路由到任何控制器/視圖/結構的任何URL。CakePHP - 自定義路由控制器

如果用戶希望創建如下東西:無需

/a_quick_brown_fox => foxes/view/42 
/jumps_over  => actions/view/42 
/lazy_dog   => dogs/view/42 

和很多人一樣在未來編輯routes.php文件,我不能確定一個可能的解決方案。

我希望允許用戶輸入類似下面

Custom URL => [  ] 
Controller => [  ] 
ID for View => [  ] 

我將其存儲在一個表中,以便爲唯一的URL檢查,並沒有什麼。爲了讓新控制器具有可擴展性,我可以使用前綴代替slu such如/l/<slug>

然後我希望插入一些代碼,它將從表中檢索自定義URL並允許路由。這是否可能?有沒有人做過?

+0

所以,你想有一個頁面上的表單,將用戶重定向到指定頁面的routes.php文件?或者用戶在哪裏輸入內容? – JJJ

+0

我相信我沒有說明我會如何處理POST數據。我在代碼塊後面進行了編輯。 – mmhan

回答

0

最簡單的方法是讓路由控制器保存新路由並緩存保存的路由。每次添加新路由時,都需要刷新緩存並再次保存。

然後創建一個自定義的路由類,將拉動緩存條目並處理它們在

0

您可以創建自定義路由類,但我不認爲您有權訪問其中的POST數據(如果夠用,您可以訪問GET數據和緩存)。可能最簡單的方法是在控制器中重定向。

+0

請查看我編輯的問題。我希望通過普通的控制器將POST數據存儲到表中。並使用存儲的表數據創建路由。 – mmhan

1

我不確定您是否可以按照您的建議直接將其定義到路由系統中,但是您可以這樣做。

首先明確定義所有的應用程序控制器/操作,以便用戶不會覆蓋它們。

然後定義一個包羅萬象的路線將路由到您的選擇

//default routes 
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display')); 
//other  

//custom route 
Router::connect('/*', array('controller' => 'routes', 'action' => 'custom')); 

的控制器你routes_controller/custom_action將收到任何參數的URL中包含,只需做你的數據庫查找從那裏,然後重定向到數據庫中定義的正確路由。

function custom() { 
    //get values via $this->params 
} 
+0

我非常喜歡它的路線/習慣/。但它仍然沒有達到由於重定向而產生「漂亮url」的結果。 – mmhan

+1

啊是的,它不會保留它來的網址。你看過這個嗎? :http://mark-story.com/posts/view/using-custom-route-classes-in-cakephp – JohnP

+0

哦..謝謝,請檢查一下。 – mmhan