Rails在PHP中“respond_to”

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.

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!

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.