2015-11-17 1 views
1

Je tente de charger un fichier d'authentification PHP dans mon contrôleur Symfony.Erreur lors du chargement du fichier PHP dans le contrôleur Symfony

Je dois l'utiliser avec require_once (impossible de le copier). Il contient une classe pour l'identification sur mon site Web.

C'est ce que j'ai essayé jusqu'à présent:

/** 
* @Route("/login") 
* @Template() 
*/ 
public function loginAction() 
{ 
    require_once("/usr/share/php/ariseid/client/OAuthAriseClient.php"); 
    require_once("./config.inc.php"); 
    $consumer = OAuthAriseClient::getInstance($consumer_key, $consumer_secret,$consumer_private_key); 

    $consumer->authenticate(); 

    if ($consumer->has_just_authenticated()) { 
      session_regenerate_id(); 
      $consumer->session_id_changed(); 
    } 

    if ($consumer->is_authenticated()) { 
      $results = $consumer->api()->begin() 
        ->get_identifiant() 
        ->done(); 

      try { 
        $_SESSION['AriseID'] = $results[0](); 
      } 
      catch(OAuthAPIException $e) { 
        echo "Erreur : ".$e->getMessage(); 
      } 
    } 
    return $this->render('SlothBundle:Default:index.html.twig', array(
      'islogged' => $consumer->is_authenticated(), 
     )); 
} 

C'est l'erreur que je reçois:

CRITICAL - Fatal Error: Class'SlothBundle\Controller\OAuthAriseClient' not found Context: {"type":1,"file":"/home/users/assoces/separatiiste/html/src/SlothBundle/Controller/DefaultController.php","line":39,"level":-1,"stack":[{"function":"loginAction","type":"->","class":"SlothBundle\Controller\DefaultController","file":"/home/users/assoces/separatiiste/html/app/bootstrap.php.cache","line":3109,"args":[]},{"function":"call_user_func_array","file":"/home/users/assoces/separatiiste/html/app/bootstrap.php.cache","line":3109,"args":[]},{"function":"handleRaw","type":"->","class":"Symfony\Component\HttpKernel\HttpKernel","file":"/home/users/assoces/separatiiste/html/app/bootstrap.php.cache","line":3071,"args":[]},{"function":"handle","type":"->","class":"Symfony\Component\HttpKernel\HttpKernel","file":"/home/users/assoces/separatiiste/html/app/bootstrap.php.cache","line":3222,"args":[]},{"function":"handle","type":"->","class":"Symfony\Component\HttpKernel\DependencyInjection\ContainerAwareHttpKernel","file":"/home/users/assoces/separatiiste/html/app/bootstrap.php.cache","line":2444,"args":[]},{"function":"handle","type":"->","class":"Symfony\Component\HttpKernel\Kernel","file":"/home/users/assoces/separatiiste/html/web/app_dev.php","line":29,"args":[]},{"function":"{main}","file":"/home/users/assoces/separatiiste/html/web/app_dev.php","line":0,"args":[]}]}

J'ai essayé avec le compositeur, mais il retourne la même erreur. Qu'en est-il de l'utilisation de composer pour charger votre fichier?

+2

require_once? dans Symfony oO c'est absurde .. Comment jamais dans votre cas vous êtes dans un espace de noms et si vous voulez appeler OAuthAriseClient vous devez mettre une barre oblique avant \ OAuthAriseClient ... – Svetoslav

+0

merci ça fonctionne peut-on m'expliquer pourquoi? et si c'est absurde, j'aimerais savoir pourquoi et comment le corriger. merci – Sky

+0

Vous pouvez lire pour PHP Namespacing à la documentation de php.net. La chose absurde en fait n'est pas vraiment faux, mais je ne peux pas vous expliquer :) Je ne suis pas bon professeur .. – Svetoslav

Répondre

1

Vous devez juste vous assurer que ces fichiers sont accessibles et dans votre dossier de projet (si vous voulez garder les choses simples).

"autoload": { 
    "psr-0": { "": "src/", "SymfonyStandard": "app/" }, 
    "files": [ 
     "ariseid/client/OAuthAriseClient.php", 
     "config.inc.php" 
    ] 
} 

Source: https://getcomposer.org/doc/04-schema.md#files

Lorsque vous utilisez vos classes que vous pouvez faire use OAuthAriseClient; sur le dessus de votre fichier, puis OAuthAriseClient::getInstance() ou vous pouvez juste préfixer une barre oblique inverse à son nom \OAuthAriseClient::getInstance() lors de son utilisation.

Source: http://php.net/manual/en/language.namespaces.importing.php

Quoi qu'il en soit, selon l'erreur que vous obtenez ce que je pense que vous devriez faire:

use SlothBundle\Controller\OAuthAriseClient; 

// ... 

$consumer = OAuthAriseClient::getInstance($consumer_key, $consumer_secret, $consumer_private_key); 

Note: Si vous allez pour authentifier l'utilisateur à chaque fois dans vos contrôleurs, pensez à ajouter un écouteur d'événement qui authentifie l'utilisateur avant d'atteindre le contrôleur.

0

Parce que vous n'êtes pas importer la classe des use déclarations,
votre contrôleur est à la recherche d'une classe qui fait partie du même espace (SlothBundle\Controller).

Vous devez utiliser votre classe comme suit:

$consumer = \OAuthAriseClient::getInstance($consumer_key, $consumer_secret,$consumer_private_key);