我有一个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 Repository返回一个User()对象,其中包含登录所需的凭据。一切正常。但是,User()可以访问$app
应用程序变量。它用于设置成员级_translator变量。见下文:
class User implements UserInterface
{
protected $_translator;
public function __construct($data = array(), $app)
{
$this->_translator = $app['translator'];
}
........
如果我设置$ this-> _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服务设置为成员级别而不会发生此错误。
有人知道这可能是什么吗?
编辑:我开始认为这是一个问题,即在我的UserRepo中存储包含Symfony Application的内容作为属性,并且仅作为安全服务的一部分。我通常可以这样做,但是当与安全服务相关时,它会中断。
答案 0 :(得分:1)
我知道这是一个老问题,但万一它可以帮助新人...
我遇到了这个错误,最后发现了原因:我已经定义了一个试图包含自己的控制器服务,例如:
$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
);
});
我责怪过多的咖啡和不眠之夜。