As you may know, in order to pass user's informations(signed_request
)
to your app, Facebook access canvas(ie: iframe) applications by
sending them a POST
request. This 开发者_运维问答mechanism is explained here.
In order to keep ReSTful, what would be the right place in Symfony (which service, file...) to implement this Ruby on Rails' trick Pierre Olivier Martel descibes here: http://blog.coderubik.com/2011/03/restful-facebook-canvas-app-with-ra... , eg: convert every POST requests containing a 'signed_request' parameter to a GET one?
You could implement a RequestListener like it is done in the RESTBundle: https://github.com/FriendsOfSymfony/RestBundle/blob/master/EventListener/RequestListener.php
Inspired from Stuck's answer(thanks!) and from Symfony Cookbook:
# src/Acme/FacebookBundle/RequestListener.php
namespace Acme\FacebookBundle;
use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
class RequestListener
{
public function onCoreRequest(GetResponseEvent $event)
{
$request = $event->getRequest();
if ('POST' == $request->getMethod() && null !== $request->get('signed_request'))
{
$request->setMethod('GET');
}
}
}
Service Definition:
# app/config/config.yml
services:
acme.facebookbundle.listener.request:
class: Acme\FacebookBundle\RequestListener
tags:
- { name: kernel.listener, event: core.request, method: onCoreRequest }
精彩评论