Installation:
composer require armetiz/facebook-bundle
Add to AppKernel.php:
new Armetiz\FacebookBundle\ArmetizFacebookBundle(),
Basic Configuration (config.yml):
armetiz_facebook:
enabled: true
sdk:
default_app:
app_id: YOUR_APP_ID
secret: YOUR_APP_SECRET
default: true
First Use Case: Inject the service in a controller and fetch user data:
use Symfony\Component\HttpFoundation\Response;
class HomeController extends Controller {
public function indexAction($facebookId, $accessToken) {
$fb = $this->get('armetiz.facebook');
$fb->setAccessToken($accessToken);
$user = $fb->api("/$facebookId", 'GET');
return new Response(json_encode($user));
}
}
config.yml and access them via:
$fbAppA = $this->get('armetiz.facebook.app_a');
$fbAppB = $this->get('armetiz.facebook.app_b');
default: true in config to access via armetiz.facebook.$fb->setAccessToken($token);
$user = $fb->api('/me?fields=id,name,email', 'GET');
$fb->setAccessToken($token);
$fb->api('/me/feed', 'POST', ['message' => 'Hello Facebook!']);
try {
$response = $fb->api('/invalid_endpoint', 'GET');
} catch (\Facebook\Exceptions\FacebookResponseException $e) {
// Handle HTTP errors
} catch (\Facebook\Exceptions\FacebookSDKException $e) {
// Handle SDK errors
}
{{ dump(app.service('armetiz.facebook').api('/me', 'GET')) }}
$fb->setAccessToken($token);
$friends = $fb->api('/me/friends', 'GET');
foreach ($friends['data'] as $friend) {
$friendData = $fb->api("/$friend[id]", 'GET');
}
Token Expiry:
$fb->setAccessToken($shortLivedToken);
$longLivedToken = $fb->getLongLivedAccessToken($shortLivedToken);
App Secrets in Config:
config.yml. Use environment variables or Symfony’s parameter bag:
parameters:
facebook.app_id: %env(FACEBOOK_APP_ID)%
facebook.app_secret: %env(FACEBOOK_APP_SECRET)%
armetiz_facebook:
sdk:
default_app:
app_id: %facebook.app_id%
secret: %facebook.app_secret%
Deprecated SDK Methods:
facebook/php-sdk (v3.x) is outdated. Consider migrating to facebook/graph-sdk for newer features.CORS Issues:
https://yourapp.com/connect/facebook).armetiz_facebook:
debug: true # Logs SDK requests/responses
$response = $fb->api('/me', 'GET');
if ($response->getStatusCode() !== 200) {
throw new \RuntimeException('Facebook API error');
}
Custom SDK Initialization: Override the bundle’s compiler pass to inject custom SDK configurations:
// src/DependencyInjection/Compiler/FacebookPass.php
public function process(\Symfony\Component\DependencyInjection\ContainerBuilder $container) {
$definition = $container->findDefinition('armetiz.facebook');
$definition->addMethodCall('setCustomConfig', [['your_key' => 'value']]);
}
Event Listeners:
Subscribe to Facebook SDK events (e.g., Facebook\BaseFacebook::LOGGED_OUT_EVENT):
// src/EventListener/FacebookListener.php
public function onFacebookLoggedOut($event) {
// Handle logout logic
}
Register in services.yml:
services:
app.facebook_listener:
class: AppBundle\EventListener\FacebookListener
tags:
- { name: kernel.event_listener, event: Facebook\BaseFacebook::LOGGED_OUT_EVENT, method: onFacebookLoggedOut }
Caching Responses: Cache API responses to reduce calls:
$cache = $this->get('cache.app');
$key = 'facebook_user_' . $facebookId;
if (!$cache->has($key)) {
$user = $fb->api("/$facebookId", 'GET');
$cache->set($key, $user, 3600); // Cache for 1 hour
} else {
$user = $cache->get($key);
}
/me/friends?fields=id,name to fetch minimal data.app_secret in client-side code. Use it only server-side for token validation:
$fb->setAppId($appId);
$fb->setAppSecret($appSecret);
$fb->validateAppId(); // Validates the token's app ID
How can I help you explore Laravel packages today?