2015-06-17 6 views
0

У меня есть приложение Silex с несколькими зарегистрированными услугами.Symfony/Silex максимальная функция уровня гнездования

$app->register(new \Silex\Provider\TranslationServiceProvider(), array(
    'locale_fallbacks' => array('en'), 
    'translator.message' => array() 
)); 

$app->register(new \Silex\Provider\SecurityServiceProvider(), array(
    'security.firewalls' => array(
    'login' => array(
     'pattern' => '^/admin/login$' 
    ), 
    'secured' => array(
     'pattern' => '^/admin/?.*$', 
     'form' => array(
      'login_path'   => '/admin/login', 
      'check_path'   => '/admin/login_check', 
      'always_use_default_target_path' => true, 
      'default_target_path' => '/admin/en', 
      'failure_path'  => '/admin/login' 
     ), 
     // users are added from custom user repository 
     'users' => $app->share(function() use ($app) { 
      return $app['syn.user_repo']; 
     }) 
    ) 
) 
)); 

$app['syn.user_repo'] = $app->share(function($app) { 
    return new \Synergy\Application\User\UserRepository($app); 
}); 

Пользовательский репозиторий возвращает объект User() с учетными данными, необходимыми для входа. Все работает нормально. Однако пользователю() предоставляется доступ к переменной приложения $app. который он использует для установки переменной _translator уровня члена. Смотрите ниже:

class User implements UserInterface 
{ 
    protected $_translator; 

    public function __construct($data = array(), $app) 
    { 
     $this->_translator = $app['translator']; 
    } 

    ........ 

Если я устанавливаю $ это -> _ переводчик, я получаю эту ошибку (которая повторяется 100 раз):

Fatal error: Maximum function nesting level of '100' reached, 
aborting! in var/www/silex.dev/vendor/symfony/debug/Exception/FlattenException.php 
on line 261 Call Stack: 0.0000 6356....... 

Я не понимаю, почему это происходит. Я не могу установить службу symfony как уровень участника без этой ошибки.

Кто-нибудь знает, что это может быть?

Редактировать: Я начинаю думать, что это проблема с сохранением ссылки на что-то, что содержит приложение Symfony в моем UserRepo как свойство, и только как часть службы безопасности. Я могу сделать это обычно, но когда по отношению к службе безопасности он ломается.

+0

Вы можете попробовать увеличить 'xdebug.max_nesting_level' в своем php.ini. Попробуйте установить его на 200, а затем, если это не сработает, попробуйте 1000. Если это еще не устраняет вашу проблему, то, скорее всего, вызывает бесконечную рекурсию. Если это так, отлаживайтесь с помощью xdebug и определите, где сделан первый циклический вызов, который повторяется бесконечно в качестве первого шага для отладки проблемы. – Paulpro

+0

Я предполагаю, что только увеличение уровня гнездования на самом деле не является исправлением, больше работы вокруг? На моем домашнем компьютере у меня нет xdebug. Однако я совершил переход к новой ветке и потянет, когда я получу работу, где у меня есть xdebug –

+0

Мне не очевидно, что вызывает ошибку, но я подозреваю, что происходит какая-то бесконечная рекурсия, и в этом случае увеличение предел ничего не исправит, но это поможет доказать, что мои подозрения верны. – Paulpro

ответ

1

Я знаю, что это старый вопрос, но в случае, если это помогает кто-то новое ...

Я имел эту ошибку, и, наконец, выяснил, почему: я определил Service Controller, который пытался включить себя, что-то например:

$app['services.puppy'] = $app->share(function() use ($app) { 
    return new PuppyService(
     $app['providers.puppy'], 
     $app['services.kitten'], 
     $app['services.doggy'], 
     $app['services.puppy'] // This is the culprit 
    ); 
}); 

Я виню слишком много кофе и бессонных ночей.