J'essaie d'obtenir l'exemple minimal
using Facebook\FacebookSession;
FacebookSession::setDefaultApplication('YOUR_APP_ID','YOUR_APP_SECRET');
// Use one of the helper classes to get a FacebookSession object.
// FacebookRedirectLoginHelper
// FacebookCanvasLoginHelper
// FacebookJavaScriptLoginHelper
// or create a FacebookSession with a valid access token:
$session = new FacebookSession('access-token-here');
// Get the GraphUser object for the current user:
try {
$me = (new FacebookRequest(
$session, 'GET', '/me'
))->execute()->getGraphObject(GraphUser::className());
echo $me->getName();
} catch (FacebookRequestException $e) {
// The Graph API returned an error
} catch (\Exception $e) {
// Some other error occurred
}
du README fonctionne, mais je ne comprends pas ce que signifie la première ligne de code. Où dois-je placer le fichier PHP en utilisant cet exemple de code minimal dans la structure de fichier SDK. J'ai essayé directement dans le dossier src, mais cela renvoie l'erreur PHP suivante
[01-May-2014 20:12:26 Europe/Berlin] PHP Parse error: syntax error, unexpected 'Facebook' (T_STRING) in /Applications/MAMP/htdocs/facebook-php-sdk-v4/src/test.php on line 9
La structure du fichier ressemble à ceci
├── src
│ ├── Facebook
│ │ ├── FacebookAuthorizationException.php
│ │ ├── FacebookCanvasLoginHelper.php
│ │ ├── FacebookClientException.php
│ │ ├── FacebookJavaScriptLoginHelper.php
│ │ ├── FacebookOtherException.php
│ │ ├── FacebookPermissionException.php
│ │ ├── FacebookRedirectLoginHelper.php
│ │ ├── FacebookRequest.php
│ │ ├── FacebookRequestException.php
│ │ ├── FacebookResponse.php
│ │ ├── FacebookSDKException.php
│ │ ├── FacebookServerException.php
│ │ ├── FacebookSession.php
│ │ ├── FacebookThrottleException.php
│ │ ├── GraphLocation.php
│ │ ├── GraphObject.php
│ │ ├── GraphSessionInfo.php
│ │ ├── GraphUser.php
│ │ └── fb_ca_chain_bundle.crt
│ └── test.php
ont récemment résolu ce problème car il y a un fichier autoload.php disponible avec sdk que vous n'avez pas besoin d'utiliser, etc etc .
<?php
session_start();
// added in v4.0.0
require_once 'autoload.php';
use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
use Facebook\Entities\AccessToken;
use Facebook\HttpClients\FacebookCurlHttpClient;
use Facebook\HttpClients\FacebookHttpable;
// start session
// init app with app id and secret
FacebookSession::setDefaultApplication( 'app-id','app-secret' );
// login helper with redirect_uri
$helper = new FacebookRedirectLoginHelper('http://yourhost/facebook/' );
try {
$session = $helper->getSessionFromRedirect();
} catch( FacebookRequestException $ex ) {
// When Facebook returns an error
} catch( Exception $ex ) {
// When validation fails or other local issues
}
// see if we have a session
if ( isset( $session ) ) {
// graph api request for user data
$request = new FacebookRequest( $session, 'GET', '/me' );
$response = $request->execute();
// get response
$graphObject = $response->getGraphObject();
// print data
echo '<pre>' . print_r( $graphObject, 1 ) . '</pre>';
} else {
// show login url
echo '<a href="' . $helper->getLoginUrl() . '">Login</a>';
}
?>
après cela, vous devez vérifier le chemin dans le fichier autoload.php
$base_dir = defined('FACEBOOK_SDK_V4_SRC_DIR') ? FACEBOOK_SDK_V4_SRC_DIR : __DIR__ . '/src/Facebook/';
cette ligne est le code par défaut si vous avez changé le nom des répertoires comme tous les fichiers placés dans/src/Facebook/en/sdk/alors remplacez simplement le nom vérifiez toujours le chemin inclus en utilisant die(__DIR__ . '/src/Facebook/');
pour vous assurer que si c'est correct.
Vous trouverez ici un exemple complet (de travail): http://metah.ch/blog/2014/05/facebook-sdk-4-0-0-for-php-a-working-sample-to-get- commencé/
Code:
session_start();
require_once( 'Facebook/FacebookSession.php' );
require_once( 'Facebook/FacebookRedirectLoginHelper.php' );
require_once( 'Facebook/FacebookRequest.php' );
require_once( 'Facebook/FacebookResponse.php' );
require_once( 'Facebook/FacebookSDKException.php' );
require_once( 'Facebook/FacebookRequestException.php' );
require_once( 'Facebook/FacebookAuthorizationException.php' );
require_once( 'Facebook/GraphObject.php' );
use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
// init app with app id (APPID) and secret (SECRET)
FacebookSession::setDefaultApplication('APPID','SECRET');
// login helper with redirect_uri
$helper = new FacebookRedirectLoginHelper( 'http://www.metah.ch/' );
try {
$session = $helper->getSessionFromRedirect();
} catch( FacebookRequestException $ex ) {
// When Facebook returns an error
} catch( Exception $ex ) {
// When validation fails or other local issues
}
// see if we have a session
if ( isset( $session ) ) {
// graph api request for user data
$request = new FacebookRequest( $session, 'GET', '/me' );
$response = $request->execute();
// get response
$graphObject = $response->getGraphObject();
// print data
echo print_r( $graphObject, 1 );
} else {
// show login url
echo '<a href="' . $helper->getLoginUrl() . '">Login</a>';
}
Je pense que vous devez changer cette ligne:
using Facebook\FacebookSession;
à
use Facebook\FacebookSession;
utiliser un espace de noms dans php, le mot clé est use
plus sur php en utilisant espaces de noms
Mettre à jour:
l'utilisation d'espaces de nommage n'inclut pas automatiquement le script. Vous devez soit inclure le chemin d'accès dans votre chargement automatique (si vous en avez un), soit simplement:
include 'path/to/FacebookSession.php';
Update2: premièrement, veuillez lire les espaces de noms php du manuel, deuxièmement, non, s'il est déjà inclus dans la classe d'origine, vous ne le savez pas. ou s'il adhère à psr- *, vous pouvez utiliser un chargeur automatique ou utiliser spl_autoload_register
Pour éviter d'utiliser require
ou require_once
et pour améliorer la structure du projet, procédez comme suit:
Créez un fichier composer.json
à la racine de votre application Web avec le contenu suivant:
{
"require" : {
"facebook/php-sdk-v4" : "4.0.*"
}
}
Appelez php composer.phar install
src/Acme/App
src/Acme/App/Run.php
avec le contenu suivant:<?php
namespace Acme\App;
use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\GraphUser;
use Facebook\FacebookRequestException;
class Run {
const APP_ID = 'app_id';
const APP_SECRET = 'app_secret';
public function __construct()
{
FacebookSession::setDefaultApplication(self::APP_ID, self::APP_SECRET);
// ...your code goes here...
}
}
index.php
avec le contenu suivant:<?php
$loader = require_once 'vendor/autoload.php';
$loader->add('Acme\App', __DIR__.'/src');
$app = new Run();
Ce sera un squelette de votre application Facebook (toutes vos classes ultérieures doivent suivre la norme PSR-4). En utilisant l'autoloader du compositeur, vous n'avez pas besoin d'utiliser require_once
pour les classes dans un espace de noms enregistré.
P.S. Vous voudrez peut-être supprimer toutes vos bibliothèques de la racine Web. Cela aidera à empêcher un accès direct du Web à eux. Ensuite, vous pouvez simplement ajuster les noms de chemin et ne conserver que index.php dans votre racine Web. J'espère que c'est clair.
Je l'ai résolu. Utilisez simplement la ligne suivante en haut de votre script:
define('FACEBOOK_SDK_V4_SRC_DIR', __DIR__ . '/facebook-php-sdk-v4/src/Facebook/');
et vous avez terminé.