2014-05-03 7 views
2

J'ai une application Silex qui fonctionne bien localement ainsi que sur le serveur. Juste mes tests PHPUnit jettent une exception alors que je les commence (UNIQUEMENT SUR LE SERVEUR, local, ils sont aussi des résultats):

« L'utilisation de ce $ lorsqu'ils ne sont pas dans le contexte de l'objet »

J'ai changé mon code et don « t mettre en cache le pare-feu plus et il fonctionne très bien (un coup d'oeil à la partie commentée):

use Silex\Application; 
use Silex\ServiceProviderInterface; 

class SecurityProvider implements ServiceProviderInterface { 

    //private $firewall; 

    public function register(Application $app) 
    { 
     $app['firewall'] = $app->protect(function() use ($app) { 
      // FIXME phpunit tests on server don't like the $this reference (no idea why?) 
      /*if($this->firewall == null) { 
       $this->firewall = new Firewall($app); 
      } 
      return $this->firewall;*/ 
      return new Firewall($app); 
     }); 
    } 

    public function boot(Application $app) 
    { 
    } 
} 

Toute personne une idée pourquoi je suis l'exception?

Merci les gars!

+0

() utiliser (app $, $ this) {...} ??? –

+3

Quelle version de PHP exécutez-vous? Selon la version, vous pourriez avoir besoin d'ajustements différents. –

Répondre

4

Vous utilisez $this à l'intérieur d'une fermeture. Avant 5.4, le $this ne pouvait pas être utilisé à l'intérieur de la fermeture. . Depuis 5.4, $this fait référence à l'objet qu'il est déclaré dans

Pour être en mesure d'exécuter vos tests en PHP 5.3, vous devez utiliser quelque chose comme:

public function register(Application $app) 
{ 
    $that = $this; 

    $app['firewall'] = $app->protect(function() use ($app, $that) { 
     if($that->firewall == null) { 
      $that->firewall = new Firewall($app); 
     } 

     return $that->firewall; 
    }); 
} 
fonction
+0

Whoop-whoop! C'est tout! Merci beaucoup! – user1879408

Questions connexes