我在CakePHP 1.2中设置了以下路线:
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。
答案 0 :(得分:1)
pass
参数的目的是定义将哪些路由参数传递给操作。所以你在那里做的是创建一个连接到这样的URL的路由:
/inbound/foo
其中foo
将作为参数传递给控制器inbound
操作。
但是,您的请求仅指向/inbound
,因此这与您的路线不匹配,因为缺少参数,因此您收到的是404。
POST请求正文中的数据作为常规POST数据传递,即可通过控制器params
属性获取:
$this->params['form']['hash']
因此,要么删除路由中的hash
参数并通过$this->params['form']
访问数据,要么传递定义hash
参数的URL中的数据:
/inbound/test
然后您可以在控制器操作中访问它,如下所示:
function inbound($hash)
{
echo $hash;
}