2

Je reçois un objet protégé retourné de l'appel de l'API à Facebook Ads.comment accéder à la réponse de la propriété protégée de facebook dans facebook ads api

$page = new Page($page_id); 
$leadgen_forms = $page->getLeadgenForms(); 

Je reçois la réponse comme ceci:

FacebookAds\Object\Page 
      (
     [response:protected] => FacebookAds\Http\Response Object 
     (
      [response:protected] => Array 
       (
        [data] => Array 
         (
          MY DATA 
         ) 
      ) 
    ) 
) 

Je l'ai déjà utilisé utilisé Reflection classe

$reflect=new \ReflectionClass($leadgen_forms); 
$properties=$reflect->getProperties('content'); 

et PtcHandyMan

require_once('PtcHm.php'); 
PtcHandyMan::register(); 
$data = PtcHandyMan::getProperty($leadgen_forms , 'content'); 

mais je ne suis pas en mesure pour accéder à la propriété protégée. Est-il possible d'accéder à la propriété protégée. Et aussi je ne comprends pas pourquoi facebook donne la réponse protégée.

Ceci est ma fonction entière

function get_page_forms(){ 
     if (!$this->input->is_ajax_request()) { 
      exit('No direct script access allowed'); 
     } 
     $page_id = $_POST['page_id']; 
     $page_access_token = $_POST['page_access_token']; 
     Api::init('APPID', 'SECRET KEY', $page_access_token); 
     $page = new Page($page_id); 
     $leadgen_forms = $page->getLeadgenForms(); 
     //$reflect=new \ReflectionClass($leadgen_forms); 
     //$properties=$reflect->getProperties('content'); 
     require_once('PtcHm.php'); 
     PtcHandyMan::register(); 
     $data = PtcHandyMan::getProperty($leadgen_forms , 'content'); 
     $allFormsArr = $data['data'];   
     $count = count($allFormsArr); 
     $output = '<div class="container"> 
        <table class="table table-responsive table-hover"> 
         <thead> 
          <tr> 
           <td>Id</td> 
           <td>Name</td> 
           <td>Leads csv file</td> 
           <td>Status</td> 
          </tr> 
         </thead> 
         <tbody>'; 
      for($i=0; $i<$count; $i++){ 
       $output .= '<tr> 
           <td>'.$allFormsArr[$i]['id'].'</td> 
           <td>'.$allFormsArr[$i]['name'].'</td> 
           <td><a href="'.$allFormsArr[$i]['leadgen_export_csv_url'].'" target="_new">Link</a></td> 
           <td>'.$allFormsArr[$i]['status'].'</td> 
          </tr>'; 
      } 
      $output .= '</tbody> 
        </table> 
       </div>'; 
     echo $output; 
    } 
+0

Selon https://developers.facebook.com/docs/marketing-api/guides/lead-ads /forms-questions/v2.8#readingforms vous devriez récupérer une structure de données simple. Et pourquoi dit-on "FacebookAds \ Object \ Page' - êtes-vous sûr que c'est la valeur de retour de la méthode, et pas seulement" $ page' ce que vous avez déposé là ...? – CBroe

+0

Ignorer 'FacebookAds \ Object \ Page' .... Mon point est comment accéder aux données protégées. Dans la documentation il montre des données simples mais ce n'est pas simple il est protégé comme je l'ai montré dans la question. –

+0

Que donne 'var_dump ($ leadgen_forms);' par conséquent? – CBroe

Répondre

0

Il existe de nombreux moyens d'accéder aux réponses de l'API facebook.

Votre code:

$page = new Page($page_id); 
$leadgen_forms = $page->getLeadgenForms(); 

vous obtenez la réponse comme ceci:

FacebookAds\Object\Page 
     (
    [response:protected] => FacebookAds\Http\Response Object 
    (
     [response:protected] => Array 
      (
       [data] => Array 
        (
         MY DATA 
        ) 
     ) 
) 

)

Vous pouvez utiliser la méthode asArray

$page = new Page($page_id); 
$leadgen_forms = $page->getLeadgenForms()->asArray(); 

https://developers.facebook.com/docs/php/GraphNode/5.0.0

ou si vous ne voulez pas utiliser asArray utiliser foreach simple pour des niveaux plus profonds:

foreach ($leadgen_forms as $leadgen_form) { 
    heres your array. It may be protected so you might want to dig deeper with another foreach and so on 
} 
0

Essayez d'utiliser des méthodes de lecture pour la propriété comme getContent. Cela pourrait vous donner accès à la propriété protégée.

+0

J'ai aussi utilisé getContent mais je n'ai pas travaillé –