2011-06-10 29 views
2

正如你可能知道,爲了傳遞用戶的信息(signed_request) 到您的應用程序,Facebook的訪問畫布(即:IFRAME)由 應用向他們發送POST請求。該機制解釋爲hereREST風格的Facebook畫布的Symfony2應用

爲了保證平安,這將是在Symfony的正確的位置(哪個服務, 文件...)來實現這個Ruby on Rails的伎倆皮埃爾·奧利維爾·馬特爾 descibes這裏:http://blog.coderubik.com/2011/03/restful-facebook-canvas-app-with-ra ... ,如:將包含'signed_request' 參數的每個POST請求轉換爲GET請求

回答

2

Stuck's answer啓發(!感謝)和Symfony的食譜:

# 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'); 
     } 
    } 
} 

服務定義:

# app/config/config.yml 

services: 
    acme.facebookbundle.listener.request: 
     class: Acme\FacebookBundle\RequestListener 
     tags: 
      - { name: kernel.listener, event: core.request, method: onCoreRequest }