Question

I've set up the following route in CakePHP 1.2:

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

Here are my request headers (via drupal_http_request()):

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

hash=test

However, I'm getting a 404 in response when I post. If I remove the parameter ":hash" from my route definition I get a 200. But in both cases the action in my controller does not get the passed parameter (hash).

I'm unsure what I'm doing wrong, as I appear to be doing what is in the doc.

Was it helpful?

Solution

The purpose of the pass parameter is to define which route parameters are being passed to the action. So what you are doing there is creating a route that connects to URLs like this:

/inbound/foo

where foo would be passed as a parameter to the controllers inbound action.

Your request however points to /inbound only, so this won't match your route as the parameter is missing, and consequently you are receiving a 404.

The data in the body of your POST request is being passed as regular POST data, ie it would be available via the controllers params property:

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

So either remove the hash parameter in the route and access the data via $this->params['form'], or pass the data in the URL where the hash parameter is defined:

/inbound/test

then you can access it in your controller action like this:

function inbound($hash)
{
    echo $hash;
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top