2012-10-20 35 views
1

我已經建立了在CakePHP的1.2以下路線:無法設置POST方法途徑CakePHP中

Router::connect(
    "/inbound/:hash", 
    array('controller' => 'profiles', 'action' => 'inbound', '[method]' => 'POST'), 
    array('hash' => '[0-9a-zA-Z]+'), 
    array('pass' => array('hash')) 
); 

這裏是我的請求頭(經drupal_http_request()):

POST /inbound HTTP/1.0 
Host: mysite.dev 
User-Agent: Drupal (+http://drupal.org/) 
Content-Length: 45 

hash=test 

不過,當我發佈信息時,我收到了404條迴應。如果我從我的路由定義中刪除參數「:hash」,我會得到一個200.但是在這兩種情況下,我的控制器中的動作都沒有得到傳遞的參數(哈希)。

我不確定我做錯了什麼,因爲我似乎在做what is in the doc

回答

1

pass參數的用途是定義將哪個路由參數傳遞給動作。所以,你在做什麼有創建連接到URL這樣的路線:

/inbound/foo 

其中foo將作爲參數傳遞給控制器​​inbound行動。

您的要求不過分,只/inbound,所以這不會匹配您作爲參數路線缺失,因此你在你的POST請求的主體接收404

的數據傳遞作爲常規POST數據,也就是說,它會通過控制器可params屬性:

$this->params['form']['hash'] 

所以要麼刪除路由中hash參數,並通過$this->params['form']的URL訪問數據,或將數據傳遞,其中hash參數被定義爲:

/inbound/test 

那麼你就可以訪問它在你的控制器動作是這樣的:

function inbound($hash) 
{ 
    echo $hash; 
} 
+0

感謝。但是,當我從路由$ this-> params ['form']中刪除傳遞元素是一個空數組。 – Justin

+0

它所描述的工作正常。你現在的路線是什麼樣的?當從URL中刪除參數時,它應該是這樣的:'Router :: connect(「/ inbound」,array('controller'=>'profiles','action'=>'inbound','[method]'= >'POST'));' – ndm

+0

哦,男人,完全是我的壞話。抱歉。我正在使用Drupal API函數來發出POST請求,但是更低級別的cURL請求工作得很好。如果你編輯這個問題,我會投票。 – Justin