У меня есть приложение 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 как свойство, и только как часть службы безопасности. Я могу сделать это обычно, но когда по отношению к службе безопасности он ломается.
Вы можете попробовать увеличить 'xdebug.max_nesting_level' в своем php.ini. Попробуйте установить его на 200, а затем, если это не сработает, попробуйте 1000. Если это еще не устраняет вашу проблему, то, скорее всего, вызывает бесконечную рекурсию. Если это так, отлаживайтесь с помощью xdebug и определите, где сделан первый циклический вызов, который повторяется бесконечно в качестве первого шага для отладки проблемы. – Paulpro
Я предполагаю, что только увеличение уровня гнездования на самом деле не является исправлением, больше работы вокруг? На моем домашнем компьютере у меня нет xdebug. Однако я совершил переход к новой ветке и потянет, когда я получу работу, где у меня есть xdebug –
Мне не очевидно, что вызывает ошибку, но я подозреваю, что происходит какая-то бесконечная рекурсия, и в этом случае увеличение предел ничего не исправит, но это поможет доказать, что мои подозрения верны. – Paulpro