Symfony / Silex最大功能嵌套级别

时间:2015-06-17 23:22:04

标签: symfony infinite-loop silex service-provider

我有一个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的内容作为属性,并且仅作为安全服务的一部分。我通常可以这样做,但是当与安全服务相关时,它会中断。

1 个答案:

答案 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
    );
});

我责怪过多的咖啡和不眠之夜。