views:

128

answers:

2

Lately I have been trying out Rails, and I came to love the respond_to.

Is it possible to do something like this in PHP?, responding to different types of requests. So it is easy to implement an alternate way even if javascript is disabled.

+1  A: 

Last time I did something similar to respond_to in Rails I used Apache .htaccess RewriteRule in order to process GET variables to php. Something like this:

RewriteEngine on
RewriteRule (\d*\.?\d*?).(html|json|xml|txt) /file.php?format=$1

I hope it helps at least a bit. Good luck.

Krule
Nice, at least I have something now. Thanks!
saint
+2  A: 

You can dispatch on the filename suffix as Krule suggests, but I believe Rails determines which content type to choose by examining the value of the HTTP Accept header (see Content negotiation on Wikipedia). In pseudo-code

$data = fetch_some_data();
switch (get_preferred_response_type($_SERVER['HTTP_ACCEPT'])) {
    case 'text/html':
       render_html($data); break;
    case 'application/xml':
       render_xml($data);
    case 'application/json':
       render_json($data);
    // etc...
}

The get_preferred_response_type() function will have to parse the Accept header and return the client's preferred MIME type. Here is an example of such a function which should help you get started; otherwise there is a content negotiation library for PHP which does all the dirty work for you.

Hope this helps!

Øystein Riiser Gundersen
+1 I think this would be a better approach.
Krule
That helps a lot, thank you
saint