2017-05-05 1 views
1

Ce sont les lignes de code qui enregistrent les fournisseurs que je utilise:Silex: l'enregistrement des résultats Brindille et SecurityServiceProvider erreur

$app->register(new Silex\Provider\TwigServiceProvider, ['twig.path' => __DIR__ . '/../resources/views']); 
$app->register(new Silex\Provider\SecurityServiceProvider()); 
$app->register(new MenuServiceProvider(), ['knp_menu.views_path' => __DIR__ . '/../resources/views']); 
$app->register(new Silex\Provider\TranslationServiceProvider()); 
$app->register(new FormServiceProvider()); 
$app->register(new Silex\Provider\ValidatorServiceProvider()); 
$app->register(new Silex\Provider\LocaleServiceProvider()); 
$app->register(new Silex\Provider\SessionServiceProvider()); 
$app->register(new Silex\Provider\AssetServiceProvider(), array(
    'assets.version' => 'v1', 
    'assets.version_format' => '%s?version=%s', 
    'assets.named_packages' => array(
     'css' => ['base_path' => Config::get('silex/baseUrl') . 'css/'], 
     'img' => ['base_path' => Config::get('silex/baseUrl') . 'img/'] 
    ), 
)); 

$app['security.firewalls'] = array(); 

Cela ne donne pas un problème, quand je charge un contrôleur comme suit, aucun problème n'apparaît. Cependant, lorsque j'essaie de faire quelque chose avec twig: soit ajouter un Global ou ajouter un filtre. Une erreur s'affiche sur mon écran.

$app['twig']->addFilter(new Twig_SimpleFilter('json_decode', function ($string) { 
    return json_decode($string); 
})); 

Il en résulte l'erreur suivante:

Fatal error: Uncaught InvalidArgumentException: Identifier "security.authentication_providers" is not defined. in H:\Software\xamp\htdocs\UserSystem\vendor\pimple\pimple\src\Pimple\Container.php:96 Stack trace: #0

C'est bizarre car il n'y a pas de problème quand je ne suis pas l'ajout d'un filtre ou global. J'ai trouvé un cas similaire à celui-ci: here. Cependant, cette solution ne semble pas faire le travail pour moi. Comment puis-je resoudre ceci?

+1

Avez-vous vérifié la deuxième réponse à la question similaire, vous lien? Ce n'est pas accepté, mais il y a plus de votes. – mTorres

+0

. Oui, j'ai essayé celui-là aussi! –

Répondre

1

On dirait que vous essayez d'ajouter des fonctionnalités au service avant de démarrer tous les fournisseurs et applications. Selon le documentation il devrait se faire comme ça (Silex 2):

$app->extend('twig', function(Twig_Environment $twig, Application $app) { 
    $twig->addFilter(new Twig_SimpleFilter('json_decode', 'json_decode')); 
    return $twig; 
}); 

Et pour Silex 1.3:

$app['twig'] = $app->share($app->extend('twig', function(Twig_Environment $twig, Application $app) { 
    $twig->addFilter(new Twig_SimpleFilter('json_decode', 'json_decode')); 
    return $twig; 
}));