У меня была такая же проблема с Symfony 2.1. Я смог предоставить параметр @service_container как параметр непосредственно у моего провайдера, а затем получить запрос ..
С тех пор как я обновился до SF 2.2, больше не работает!
Даже если вы установили «scope: active» или «public: true» в своей конфигурации.
Если вы попытаетесь получить запрос промежуточным слушателем, это тоже не сработает ... Кажется, начиная с SF2.2 запрос не вводится вовремя или что-то в этом роде.
Так вот, как я могу получить запрос внутри провайдера, я не знаю, если он чист, но это единственное решение, которое я нашел, я приклеил 2 решения, для SF 2.2 и SF 2.1:
SF класса 2,2
Поставщик:
use Symfony\Component\HttpFoundation\Request;
// ...
class WebsiteUserProvider implements UserProviderInterface
{
private $websiteUrl;
// ...
public function __construct(UserManager $userManager)
{
$this->userManager = $userManager;
// Works for sf2.2, init manually the request
$request = Request::createFromGlobals();
$this->websiteUrl = $request->getHost();
}
// ...
}
Вот оно!
SF 2.1
класс Поставщик:
// ...
class WebsiteUserProvider implements UserProviderInterface
{
private $websiteUrl;
// ...
public function __construct($container, UserManager $userManager)
{
$this->userManager = $userManager;
if ($container->isScopeActive('request')) {
$this->websiteUrl = $container->get('request')->getHost();
}
}
// ...
}
Конфигурация:
sybio_website.user_provider:
class: Sybio\Bundle\WebsiteBundle\Security\Authentication\Provider\WebsiteUserProvider
arguments: [@service_container, @sybio.user_manager]
Это точно задает вопрос, который я поставил под вопрос: «ScopeWideningInjectionException: Scope Widening Injection detected» – nicoonee
Затем перейдите к прослушивателю запроса. – Cerad