2010-06-13 21 views
1

這是我在這裏的第一篇文章:)使用Cakephp網址的正確方法是什麼?

我在處理網址和參數時遇到了一些困難。我一遍又一遍地瀏覽路由器類的api文檔,發現沒有用。

首先,我想知道CakePHP(1.3)中是否有任何「通用」格式來處理網址。我目前正在處理所有我的url作爲簡單的數組(以Router :: url和$ html-> link接受的格式),只要我只需要將它們作爲參數傳遞給cake自己的方法就很容易。如果我需要別的東西,它通常會變得棘手。

主要是我有轉換字符串網址到基本數組格式的問題。 比方說,我想$ arrayUrl再次轉換爲字符串,不是進入網址:

$arrayUrl=array('controller'=>'SomeController','action'=>'someAction','someValue'); 
$url=Router::url($arrayUrl);  //$url is now '/path/to/site/someController/someAction/someValue' 
$url=Router::normalize($url);  //remove '/path/to/site' 
$parsed=Router::parse($url);  /*$parsed is now 
Array(
    [controller] => someController 
    [action] => someAction 
    [named] => Array() 
    [pass] => Array([0] => someValue) 
    [plugin] => 
) */ 

這似乎是一個可怕的很多代碼做簡單的東西,以2種核心格式之間的轉換。另外請注意,$ parsed與$ arrayUrl仍然不一樣。當然,我可以手動調整$解析,實際上我已經做了幾次,作爲一個快速修補程序,但我想深究這一點。我也注意到,當使用前綴路由時,控制器中的$ this-> params在動作中嵌入了前綴(即[action] =>'admin_edit'),而Router :: parse()的結果不會。兩者當然都有它自己的密鑰中的前綴。總結一下,如何在這3個(或4個,如果包含前綴的東西)之間轉換一個url,提供的格式是正確的? 當然,這很容易破解我的方式,但我仍然希望相信蛋糕是由一羣比我有更多經驗和洞察力的人開發的,所以我猜測這裏有一個這種「感知不當行爲」的充分理由。

我試過盡我所能提出我的問題,但由於我生鏽的英語技能,我不得不走幾彎路:)如果需要,我會解釋更多。

回答

2

Cake URL的「官方」格式應該是數組符號array('controller' => 'foo', 'action' => 'bar', 'baz', 'admin' => true)。每當你寫URL時,你都應該使用這種格式。路由器類會將它們轉換爲字符串(/admin/foo/bar/baz)或分派器所需的信息(array('named' => array(), 'pass' => array(), …)),具體取決於URL的使用位置。

您應該根據您想要調用的控制器動作來考慮它。網址(作爲字符串)只是在Web上下文中完成這項工作的必要罪惡。應該沒有必要使用Dispatcher格式。在指定URL時,您也不應使用字符串符號,因爲如果您想要更改URL方案,則不能反向路由。

也許你可以用一個例子來解釋爲什麼你需要將這三種形式從一種轉換爲另一種?

+0

感謝您的快速回答。 我問過這個問題,因爲我知道的不是一個sigle Cake函數會返回這個(數組)格式。缺乏一個真實的例子,我們使用$ controller-> referer()。 referer()的結果是字符串,我需要將其轉換爲數組以便對其進行修改。我知道的唯一方法是Router :: parse(),它返回調度器參數。如果我想將結果與數組URL進行比較,那麼我還必須將數組URL轉換爲調度程序參數,這通過Router :: parse(Router :: normalize(Router :: url($ arrayUrl)))完成。不好。 – jpeltoniemi 2010-06-13 12:27:06

+0

@Pichan推薦人是一個有趣的案例,因爲它既是你可能想要分析的東西,也是你不應該首先關注的東西。既然你真的缺乏一個例子,我的建議就是這樣。 :) – deceze 2010-06-13 23:05:34

+0

假設我需要將當前網址保存到會話中,所以當某個任務完成後,訪問者會回到源自任務的頁面。到目前爲止,我一直在使用$ this-> params,這與array數組不同,所以需要一點點修補才能讓它們變得更好。 我只是想避免以某種格式硬編碼已經可用於控制器的URL。我開始認爲蛋糕不會在這一塊上與我一起工作,但它只是蛋糕還是我的思想有缺陷?畢竟,我對整個MVC的東西都很綠,所以它不會是一個驚喜:) – jpeltoniemi 2010-06-14 00:15:46

相關問題