2012-02-24 31 views
0

我正在嘗試爲我正在構建的項目構建一種Wordpress-esque CMS系統。我希望用戶能夠即時創建頁面,並讓他們出現在網站的某些區域。從URL獲取一個變量,然後將其傳遞給控制器​​CakePHP 2.0

我在Symfony2中做了類似的東西,在這裏控制器從URL中獲取一個特定的變量(如route.yml文件中定義的,通常是$ id等),然後使用控制器中的變量顯示任何內容它涉及到數據庫中。

但是,我不習慣CakePHP 2.0,並努力尋找我需要的東西。我知道這是可能的,但我不知道實現它的最佳方式。尤其是CakePHP使用與Symfony不同的路由文件。

我該如何從URL中獲取變量並將其傳遞給控制器​​使用?

回答

1

簡答:取決於。

如果您正在尋找將參數傳遞給函數,則根本不需要弄亂路由;每個非指定的URL路徑段都按順序處理並作爲方法參數傳遞給動作(因此/controller/action/1234將「1234」作爲controller控制器類中的action方法的第一個參數)。

命名參數允許您在URL字符串中的任意位置傳遞參數,並使其成爲可選參數。該表格只是關鍵:值,可通過控制器中的$this->params['named']進行訪問。

最後一個選項是前綴路由。加速的最好的地方當然是the CakePHP Cookbook,但是一般的要點是,在路由定義中,可以通過在冒號前加上一個路徑組件來命名路徑組件,與默認路由顯示方式相同:controller,:plugin:action。您可以定義您喜歡的任何名稱,甚至可以選擇應用正則表達式模式要求,然後通過控制器中的$this->params['variablename']訪問它。

2

通過變量你的意思是GET查詢字符串參數,如在/foo?key=value?您可以通過the request object$this->request->query['key']在控制器中訪問它們。

如果您正在尋找更加集成的東西,您可以使用CakePHP的默認路由或創建自己的路由。

默認路由使用URL如/controller/action/param1/param2並將參數傳遞給按位置操作。例如/posts/view/521映射到view(521)的呼叫PostsController,並且/posts/byMonth/2012/02映射到對byMonth("2012","02")的呼叫。

您也可以使用命名參數和URL看起來像/controller/action/key1:value1/key2:value2。在控制器操作中,您可以使用$this->params['named']['key1']來閱讀它們。

隨着定製路線你可以讓你的網址任何你想要的。你不會被強迫進入/ controller/action模式。你可以把/archives/2012-02映射到PostsController::byMonth(2012,2),或者把/512-post-title映射到PostsController::view(512)

通常,您會從默認路線開始,並在您決定需要時添加自定義路線。您可以在http://book.cakephp.org/2.0/en/development/routing.html

+0

中看到有關默認和自定義路線的所有信息。這是類似於我想要的。儘管我想在/之後獲取變量,例如http://www.domain.com/pages/variable。所以我想要一個獲取頁面後變量的方法/? – mickburkejnr 2012-02-24 15:36:38

+0

你需要一個自定義路線。默認路由處理'/ controller/action/variable'類型的URL。 – Joni 2012-02-24 15:47:18

相關問題